1

可能重复:
在 Python 中,如何按排序顺序遍历字典?

我需要字典方面的帮助。我有两个字典,我想在这两个字典中添加相同键的值。我需要列出对具有相同键的值求和的列表。我做了这个列表,但是在完成所有计算后添加了它们的键是两个字典中唯一的那些值。我的意思是:

dectionary1= {8: 2, 0: 6, 2: 5, 3: 34}  
dectionary2= {8: 6, 1: 2, 3: 2}

我的清单必须是:

summing= [6, 2, 5, 36, 8]

因为它将取0并检查dectionary 2中是否有0,然后它将TAKE 1(NOT 2)并检查是否在dectionary 1中找到它以便对列表进行排序。

到目前为止我得到了这个:

summing=[8, 6, 5, 36, 2]

在这里它最初需要键(8)而不是(0)!我希望它井井有条。

要查看我的代码,到目前为止我得到了什么:

dic1= {8: 2, 0: 6, 2: 5, 3: 34}  
dic2= {8: 6, 1: 2, 3: 2}
p=[]
for x in dic1:
    if x in dic2:
        g=dic1[x]+dic2[x]
        p=p+[g]
    else:
        p=p+[dic1[x]]
for m in dic2:
    if m in dic1:
        p=p
    else:
        p=p+[dic2[m]]

我想如果我可以让字典升序排列,那会容易得多,但是怎么做呢?

我的 python 是 Wing IDE 3.2

谢谢

4

1 回答 1

8

您在这里有两种选择,一种是使用collections.OrderedDict(),但我认为更简单的选择就是这样做:

[dic1.get(x, 0)+dic2.get(x, 0)for x in sorted(dic1.keys() | dic2.keys())]

我们首先在任一字典中创建一组任意键,将其排序为正确的顺序,然后使用列表推导循环遍历它,添加两个值(如果该值不存在,则添加 0)

>>> dic1= {8: 2, 0: 6, 2: 5, 3: 34}  
>>> dic2= {8: 6, 1: 2, 3: 2}
>>> [dic1.get(x, 0)+dic2.get(x, 0)for x in sorted(dic1.keys() | dic2.keys())]
[6, 2, 5, 36, 8]

请注意,这仅适用于 3.x,其中dict.keys()返回一个类似集合的字典视图。如果您想在 python 2.7.x 中执行此操作,那么在此dict.viewkeys()之前使用set(dict.iterkeys())会是最佳选择。

于 2012-04-30T15:45:09.920 回答