2013-09-26 5 views
2

저는 파이썬에서 아주 새로운 것 같습니다. 제 질문은 간단 하긴하지만 어떤 대답도 찾을 수 없습니다. C 구조체로 작성된 목록을 만들고 내부의 항목에 액세스하려면 다음을 작성하고 싶습니다.파이썬 : 작곡 목록을 만드는 법?

for i in list1 
     create item in list2[list3[StringVar1, StringVar2], bool1, Frame1] 
     item.list3[StringVar1] = i 
     item.list3[StringVar2] = value 
     item.bool1 = True 
     item.Frame1 = tk.Frame(self) 

어떻게 파이썬으로 작성할 수 있습니까?

편집 : Martijn Pieters가 맞습니다. 방금 수정했습니다.

+1

이것은 유효한 Python이 아닙니다. –

+0

@Tichodroma 따라서 "어떻게 파이썬에서 작성할 수 있습니까?" –

+1

내가 생각할 수있는 C-Struct에 가장 가까운 것은 여러분이 더 나은 해석을하면'namedtuple'입니다. 그러면 제 대답을 바꿀 수 있도록 의견을 말하십시오. –

답변

0

당신은 항상 당신이뿐만 아니라 값으로 다른 사전이나 목록을 지정할 수 있습니다 파이썬 사전을

item = {} 
item["list2"] = {} 
item["list2"]["list3"] = {} 
item["list2"]["list3"][Var1] = Value1 
item["list2"]["list3"][Var2] = Value2 
... 

를 사용할 수 있습니다.

삭제와 관련하여 "del"키워드를 사용하여 삭제할 수 있습니다. 전

dictionary = {} 
dictionary["name"] = {} 
dictionary["name1"] = {} 
del dictionary["name1"] 
dictionary 
{'name': {}} 
4

를 들어 당신이 목록 구성 를 말할 때 내가 정확히 무엇을 의미하는지가 이해하지 않지만, 실제로 당신은 파이썬에서 구조체를 가질 수 있습니다.

이상적으로 당신은 개체와 같은 불변의 C-Struct를 원한다는 것을 의미합니다. 매우 쉽게 만들 수 있습니다. 파이썬에서는 namedtuple이라 불리는데, 적어도 이것이 내가 만났던 가장 가까운 것이다. 물론 파이썬에서 자신의 제네릭 객체를 만들고 인자를 추가 할 수는 있지만 대신 동적 인 구조체가 될 것입니다.

이상적으로는, C에서,이 같은 구조체 것 ->

struct tag_name 
{ 
    type attribute; 
    type attribute2; 
    /* ... */ 
}; 

을 그리고 당신이 그렇게 tag_name.attribute처럼 struct의 속성에 액세스 할 수 있습니다. 특정에하고 싶은 것이 있다면

>>> from collections import namedtuple 
>>> NetworkAddress = namedtuple('NetworkAddress',['hostname','port']) 
>>> a = NetworkAddress('www.python.org',80) 
>>> a.hostname 
'www.python.org' 
>>> a.port 
80 
>>> host, port = a 
>>> len(a) 
2 
>>> type(a) 
<class '_ _main_ _.NetworkAddress'> 
>>> isinstance(a, tuple) 
True 
>>> 

, 그때 나는이 대답을 업데이트 할 수 있도록 구성 목록을 설명하기 위해 질문을 업데이트하십시오 : 그래서, 이것은 namedtuple 작품 방법이다.

그러나 C와 같은 정적 유형 언어는 Python을 사용하기 때문에 멋진 동적 속성을 사용할 수 있으므로 본질적으로 속성을 추가 할 수있는 객체를 만들 수 있습니다.

class DynamicObject(object): 
    def __init__(self, **kwargs): 
     self.__dict__.update(kwargs) 

콘솔 세션

>>> class DynamicObject(object): 
    def __init__(self, **kwargs): 
     self.__dict__.update(kwargs) 
>>> happy_obj = DynamicObject(name="Happy Gilmore") 
>>> happy_obj.name 
'Happy Gilmore' 

크레딧 ->

,536,

https://stackoverflow.com/users/320726/6502 동적 객체 코드입니다. 고마워요.

0

object에서 파생 된 모든 항목은 __dict__ 회원 인 dict입니다.그래서 당신은 할 수 있습니다 :

class X(object): 
    pass 

x = X() 
x.__dict__["a"] = 1 
x.a #1 

다른 방법이 사용자 setattrgetattr이다 할 :

setattr(x, "b", 2) # same as x.__dict__["b"] = 2 
당신은 그러나 당신이 이름이 필요합니다, 일부 입력 구조라는 이름의 액세스를 구축하기 위해 이것을 사용할 수 있습니다

및 당신의 복합체 입력 구조의 값 (본질적으로 명명 된 자식을 가질 모든 노드에 대해 중첩 된 dicts와 같은 것)

0

그러나 데이터 구조체가 잘못되었다고 생각합니다. 사용 방법은 c와 같은 배열과 같습니다. 즉, 숫자 인덱스로 elem을 찾을 수 있으므로 list3[StringVar1,StringVar2]과 같은 목록을 사용할 수 없습니다. 아마도 파이썬 사전이 여러분의 필요를 충족시킬 수 있습니다. item.list3을 사용하려면 파이썬에서 클래스를 정의해야합니다.

+0

과 함께 나는 턱시도를 잡았다. 나는 데이터 구조를 묘사했는데, 그것을 접근하는 와트가 아니었다 : list3에 2 개의 항목이있다. – user2818831

관련 문제