如何在单个for循环中遍历两个词典?

时间:2013-06-14 04:14:29

标签: python dictionary

我想产生以下效果:

for i, j in d.items() and k, v in c.items():
    print i, j, k, v

这是错误的。我想知道如何实现这个目标?

2 个答案:

答案 0 :(得分:19)

for (i, j), (k, v) in zip(d.items(), c.items()):
   print i, j, k, v

请记住,除非您的词典是OrderedDict,否则订单将是任意的。为了节省内存

在Python 2.x(其中dict.itemszip创建列表)中,您可以执行以下操作:

from itertools import izip
for (i, j), (k, v) in izip(d.iteritems(), c.iteritems()):
   print i, j, k, v

这不一定会更快,因为您将在小型列表中观察到迭代这些中间列表会更快,但是在迭代非常大的数据结构时您会注意到速度的提高。

在Python 3.x中zipizip相同(不再存在),dict.itemsdict.iteritems不再存在)返回{{3}而不是列表

答案 1 :(得分:2)

你的问题不清楚,是否要在两个嵌套的for循环中迭代字典,或者并排(在@jamylak的答案中完成)

这是嵌套解释

from itertools import product
for (i, j), (k, v) in product(d.items(), c.items()):
    print i, j, k, v

例如

>>> d={'a':'Apple', 'b':'Ball'}
>>> c={'1':'One', '2':'Two'}
>>> from itertools import product
>>> for (i, j), (k, v) in product(d.items(), c.items()):
...     print i, j, k, v
... 
a Apple 1 One
a Apple 2 Two
b Ball 1 One
b Ball 2 Two