我是Python的新手。我想我的问题很简单,但我找不到任何答案。我想创建,删除一个组合列表(作为一个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)
如何在Python中编写?
编辑:Martijn Pieters是对的,我刚才更正了。
答案 0 :(得分: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,我们可以使用一些很酷的动态属性,所以你实际上创建了一个可以根据需要添加属性的对象: / p>
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'
积分 - &gt;
https://stackoverflow.com/users/320726/6502表示动态对象代码。谢谢你:)
答案 1 :(得分: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': {}}
答案 2 :(得分: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)
答案 3 :(得分:0)
但是,我认为你的数据结构是错误的。对于使用方法就像c中的数组一样。这意味着我们可以通过数字索引找到elem,因此您不能使用list3[StringVar1,StringVar2]
之类的列表。
也许python中的字典可以满足您的需求。如果你想使用item.list3
,你必须在python中定义一个类。