2013-09-26 2 views
2

Я совершенно новый в Python. Полагаю, мой вопрос прост, но я не нахожу ответа. Я хотел бы создать, удалить составленный список (как C структуру) и пункты доступа внутри:Python: Как создать составленный список?

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) 

Как я могу написать, что в Python?

Редактировать: Martijn Pieters прав, я только что исправил.

+1

Это недопустимый Python. –

+0

@Tichodroma, следовательно, вопрос «Как я могу написать это в Python?» –

+1

Самое близкое к C-Struct, что я могу придумать, это 'namedtuple', если вы, ребята, лучше интерпретируете, тогда прокомментируйте, чтобы я мог изменить свой ответ. –

ответ

0

Вы всегда можете использовать словарь Python

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

Я не совсем понимаю, на что вы имели в виду, когда вы говорите составленному список, но на самом деле вы можете иметь структуры в Python.

В идеале вы подразумеваете, что вам нужен неизменный объект типа C-Struct, вы можете создать его довольно легко. В Python его называют namedtuple, или по крайней мере это самое близкое, с которым я столкнулся. Конечно, вы можете создать свой собственный общий объект в Python и добавить аргументы, но вместо этого это будет динамическая структура.

В идеале, в C, вы бы-структуру, как это ->

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

И вы могли бы получить доступ к атрибутам struct как так tag_name.attribute. Итак, вот как namedtuple работы:

>>> 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 
>>> 

Если есть что-нибудь, что вы хотели бы в конкретном, то, пожалуйста, обновите ваш вопрос объяснить составленного список так что я могу обновить этот ответ.

Однако, это типично для статически типизированного языка, такого как 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' 

Кредиты ->

https://stackoverflow.com/users/320726/6502 для динамического объектного кода. Спасибо, человек :)

0

Вы должны знать, что объекты нового стиля (все, что происходит от object) имеют член __dict__, который является dict.Так что вы можете сделать:

class X(object): 
    pass 

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

другой способ сделать это, чтобы пользователь setattr и getattr:

setattr(x, "b", 2) # same as x.__dict__["b"] = 2 

Вы можете использовать это, чтобы создать именованный доступ к некоторым входной структуре, однако вам нужны названия и значения в вашей составной структуре ввода (по существу, что-то вроде вложенных dicts для всех узлов, которые должны иметь имена детей)

0

Однако, я думаю, что ваша структура данных неверна. Для использования метод похож на массив, как в c. Это означает, что мы можем найти elem по индексу числа, поэтому вы не можете использовать список, например list3[StringVar1,StringVar2]. Возможно, словарь в python может удовлетворить ваши потребности. Если вы хотите использовать item.list3, вы должны определить класс в python.

+0

Я описал структуру данных, а не wat, чтобы получить к ней доступ: в списке 3 есть 2 элемента. – user2818831

Смежные вопросы