Python:如何创建组合列表?

时间:2013-09-26 11:53:38

标签: python list

我是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是对的,我刚才更正了。

4 个答案:

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

另一种方法是使用setattrgetattr

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

您可以使用它来构建对某些输入结构的命名访问,但是您需要在复合输入结构中使用名称和值(实质上,类似于所有具有命名子项的节点的嵌套dicts)

答案 3 :(得分:0)

但是,我认为你的数据结构是错误的。对于使用方法就像c中的数组一样。这意味着我们可以通过数字索引找到elem,因此您不能使用list3[StringVar1,StringVar2]之类的列表。 也许python中的字典可以满足您的需求。如果你想使用item.list3,你必须在python中定义一个类。