2012-04-30 65 views
1

Possible Duplicate:
In Python, how to I iterate over a dictionary in sorted order?如何在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,然後它會採取1(而不是2)和檢查它是否在第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是永IDE 3.2

謝謝

+1

'common_keys =設定(dic1.keys())&設置(dic2.keys())'。而字典元素沒有排序,所以你沒有「爲了你的情況」這樣的事情。 – ThiefMaster

回答

8

你這裏有兩種選擇,一種是使用collections.OrderedDict(),但我認爲更容易的選擇很簡單,就是做這種方式:

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

我們首先製作一組任意鍵in either of the dictionaries,sort this into the right order,然後loop over it with a list comprehension,加上這兩個值(or 0 if the value doesn't already exist)

>>> 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()返回set-like dictionary view這僅適用。如果你想在python 2.7.x中執行此操作,請使用dict.viewkeys(),而在此之前,set(dict.iterkeys())將是最佳選擇。

+0

請仔細檢查語法。在Python 2.7.x中引發'TypeError:不受支持的操作數類型爲|:'list'和'list'(甚至在')'和'for'之間有空格) –

+0

必須是'[dic1.get(x, 0)+ dic2.get(x,0)for sort in(set(dic1.keys())| set(dic2.keys()))]' –

+0

in python3,'[dic1.get(x,0) + dic2.get(x,0)for sort in(dic1.keys()| dic2.keys())]'也應該可以工作(不需要'set()') – ch3ka