你能为多个对象使用枚举吗?

时间:2014-08-19 03:18:36

标签: python enumerate

我想知道是否说我在python中定义了两个(或者甚至更多)字典,带有一些键和相应的数据,我可以使用枚举语句访问这两个元素吗?:

for i, key1, key2 in enumerate(dict1,dict2)
... "do something"

谢谢!

3 个答案:

答案 0 :(得分:6)

不,但你可以这样做:

for i, (key1, key2) in enumerate(zip(dict1, dict2)):
    # do something
    pass

但请记住:

  • 字典的元素是无序的,因此我们无法预测密钥出现的顺序 - 甚至可能在字典增长时发生变化。
  • 如果一个字典中的元素多于另一个字典,则其中的一些键不会出现在迭代中。如果两个字典都具有相同的大小,那么它将正常工作。

答案 1 :(得分:2)

我不确定你想要实现的目标。如果您只想迭代枚举键,一次两次(或更多),那么您可以按Óscar's answer使用zip(dict1, dict2,...)。或者您可以使用itertools.izip_longest()来处理长度不同的词典。

如果您希望按顺序迭代每个字典的键和,那么您可以像这样使用itertools.chain()

from itertools import chain

for i, (key, value) in enumerate(chain(dict1.items(), dict2.items(), dict3.items())):
    # do something
    pass

>>> dict1 = {'a': 1, 'c': 3, 'b': 2}
>>> dict2 = {'y': 25, 'x': 24, 'z': 26}
>>> dict3 = {'orange': 'orange', 'apple': 'red', 'banana': 'yellow'}
>>> for i, (key, value) in enumerate(chain(dict1.items(), dict2.items(), dict3.items())):
...     print "{}: {} => {}".format(i, key, value)
... 
0: a => 1
1: c => 3
2: b => 2
3: y => 25
4: x => 24
5: z => 26
6: orange => orange
7: apple => red
8: banana => yellow

答案 2 :(得分:0)

这取决于你想要枚举的方式。

假设:

>>> di1={'1':1, '2':2, '3':3}
>>> di2={'4':4,'5':5}

您可以使用itertools中的chain将其作为一个系列文章:

>>> for i, e in enumerate(it.chain(di1.items(), di2.items())):
...    print i, e
... 
0 ('1', 1)
1 ('3', 3)
2 ('2', 2)
3 ('5', 5)
4 ('4', 4)

您可以使用izip_longest成对:

>>> for i, e in enumerate(it.izip_longest(di1.items(), di2.items())):
...    print i, e
... 
0 (('1', 1), ('5', 5))
1 (('3', 3), ('4', 4))
2 (('2', 2), None)