我希望有一个3项组合,如标记,名称和值列表(数组),这是存储此类内容的最佳数据结构。
当前我正在使用字典,但它只允许2个项目,但使用
轻松遍历for k, v in dict.iteritems():
我们可以有类似的东西:
for k, v, x in tuple.iteritems():
答案 0 :(得分:8)
Python tutorial on data structutres参见第5.3节“元组和序列”
但是,如果您想使用“name”来索引数据,您可能希望使用字符串名称为键的字典,值为(tag,[list,of,values])的元组,例如< / p>
d =
{ "foo" : ("dog", [1,2,3,4]),
"bar" : ("cat", [4,5,6,7,8,9]),
"moo" : ("cow", [4,5,7,8,9,1,3,4,65])
}
for name,(tag,values) in d.items():
do_something()
这种方式d["foo"]
也可以,就像任何其他词典一样。
答案 1 :(得分:4)
为什么不只使用元组列表(是的,这是python中的数据类型,如列表,但是不可变):
mylistoftuples = [(1, 2, 3), (2, "three", 4), (3, 4, [1, 2, 3, 4, 5])]
for k, v, x in mylistoftuples:
print k, v, x
答案 2 :(得分:4)
您可以考虑使用collections.namedtuple
类型来创建类似于元组的对象,这些对象具有可通过属性查找访问的字段。
collections.namedtuple(typename, field_names[, verbose])
返回名为typename的新元组子类。新子类用于创建类似元组的对象,这些对象具有可通过属性查找访问的字段以及可索引和可迭代的字段。子类的实例还有一个有用的docstring(带有typename和field_names)和一个有用的
__repr__()
方法,它以name = value格式列出元组内容。
>>> import collections
>>> mytup = collections.namedtuple('mytup', ['tag','name', 'values'])
>>> e1 = mytup('tag1','great',[1,'two',3])
>>> e1
mytup(tag='tag1', name='great', values=[1, 'two', 3])
>>> e1.values
[1, 'two', 3]
>>>
基于其他答案,过滤mytup
个对象列表的示例:
>>> tlist = [mytup("foo", "dog", [1,2,3,4]),
mytup("bar","cat", [4,5,6,7,8,9]), mytup("moo","cow", [4,5,7,8,9,1,3,4,65])]
>>> tlist
[mytup(tag='foo', name='dog', values=[1, 2, 3, 4]),
mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9]),
mytup(tag='moo', name='cow', values=[4, 5, 7, 8, 9, 1, 3, 4, 65])]
>>> [t for t in tlist if t.tag == 'bar']
[mytup(tag='bar', name='cat', values=[4, 5, 6, 7, 8, 9])]
>>>
当然, Namedtuple
个对象可以在其他结构中使用(例如dict
),如其他答案中所述。显然,优点是字段命名为,使用它们的代码更清晰。
答案 3 :(得分:1)
以下是对@gimel's answer的评论:
>>> import collections
>>> T = collections.namedtuple("T", 'tag name values')
>>> from itertools import starmap
>>> list(starmap(T, [("a", "b", [1,2]), ("c", "d",[3,4])]))
[T(tag='a', name='b', values=[1, 2]), T(tag='c', name='d', values=[3, 4])]
答案 4 :(得分:0)
您可以拥有一个包含3项元组的数组。
arr = [ (1,2,3), (4,5,6), (7,8,9)]
for (k, v, x) in arr:
# do stuff