2016-01-22 35 views
0

考虑字典这样遍历字典对于使用单回路

a_dict = {"a":1,"b":3,"c":4} 
b_dict = {"d":44,"e":23} 
for (k,v),(k1,v1) in zip(a_dict.items(),b_dict.items()): 
    print(k,v); 
    print(k1,v1); 

使用这个代码,我从每个字典两种元素得到的所有元素。像:

b 3 
e 23 
c 4 
d 44 

在这里,我没有得到:

a 1 

从字典a_dict
但我希望每个字典中的所有元素都使用来自a_dict的三个元素和来自b_dict的两个元素的单个循环。有没有简单的方法来完成这项任务?

+1

请后所希望的输出。你的描述非常含糊 – inspectorG4dget

+0

你正在压缩两组不同的长度! – SIslam

+0

您可能想使用['itertools.izip_longest'](https://docs.python.org/2/library/itertools.html#itertools.izip_longest)(如果您使用的是Python 3,则为'zip_longest') – SuperBiasedMan

回答

2

问题在于当zip()到达较小序列的末尾时停止。如果您希望不同的东西,你可以使用itertools.zip_longest()

from itertools import zip_longest 
a_dict = {"a":1,"b":3,"c":4} 
b_dict = {"d":44,"e":23} 
for a_pair,b_pair in zip_longest(a_dict.items(),b_dict.items()): 
    if a_pair: 
     print(a_pair[0],a_pair[1]) 
    if b_pair: 
     print(b_pair[0],b_pair[1]); 
-2

的低技术含量的方法是通过你的字典迭代,处理每一个依次为:

a_dict = {"a":1,"b":3,"c":4} 
b_dict = {"d":44,"e":23} 
for c in (a_dict, b_dict): 
    for (k,v) in (c.iteritems()): 
     print(k,v); 

输出:

('a', 1) 
('c', 4) 
('b', 3) 
('e', 23) 
('d', 44) 
+1

如果这是你所期望的,你可以使用'itertools.chain'来避免嵌套:'for k,v in chain(a_dict.items(),b_dict.items()):'' – ShadowRanger

0

将这两个项链接在一起会为您提供循环中的所有键值对:

from itertools import chain 

a_dict = {"a":1,"b":3,"c":4} 
b_dict = {"d":44,"e":23} 

for k, v in chain(a_dict.items(),b_dict.items()): 
    print(k, v) 

输出:

c 4 
a 1 
b 3 
e 23 
d 44