2013-05-29 65 views
0

蟒蛇合併字典我期待與有共同的值,那麼關鍵的字典詞典合併在Python。目前,我在循環內部的一個循環內部有一個討厭的循環。必須有一個更好的辦法...與普通的鍵/值

我有一個字典,一個單一的數字鍵,該值號碼列表,然後第二個字典,與在其中一個數字相對應的鍵值列表和與該號碼關聯的浮點數。他們此格式(雖然大得多):

dict1 = {0:[3, 5, 2, 7], 1:[1, 4, 0, 6]} 
dict2 = {0:0.34123, 1:0.45623, 2:0.76839, 3:0.32221, 4:0.871265, 5:0.99435, 6:0.28665, 7:0.01546} 

,我想將它們合併,使他們看起來像這樣:

dict3 = {0:[0.32221, 0.99435, 0.76839, 0.01546], 1:[0.45623, 0.871265, 0.034123, 0.28665]} 

有沒有做到這一點比一些嵌套了一個簡單的方法循環?任何幫助將大量讚賞!

+4

合併他們什麼樣的方式?我真的沒有看到數字之間有任何明顯的相關性 – Voo

回答

3

您可以使用字典解析裏嵌套列表理解這樣做:

dict3 = {k: [dict2[i] for i in v] for k, v in dict1.items()} 

這將通過第一部字典中的所有k/v -combinations基本上迭代。該k保持對所得字典中的鍵,vdict2各項指標應該使用值的列表。因此,我們通過v的元素進行迭代,並收集dict2我們要採取一切物品,結合那些在列表中(使用列表理解),並使用該結果作爲結果詞典的價值。

+0

哇。優雅和完美!謝謝。 – Micrasema

2
>>> dict1 = {0:[3, 5, 2, 7], 1:[1, 4, 0, 6]} 
>>> dict2 = {0:0.34123, 1:0.45623, 2:0.76839, 3:0.32221, 4:0.871265, 5:0.99435, 6:0.28665, 7:0.01546} 
>>> {k:[dict2[m] for m in v] for k, v in dict1.items()} 
{0: [0.32221, 0.99435, 0.76839, 0.01546], 1: [0.45623, 0.871265, 0.34123, 0.28665]} 
+0

你收斂在上面@poke相同的答案。謝謝! – Micrasema

0

而另一個字典理解,但地圖...

dict3={k: map(lambda x: dict2[x],dict1[k]) for k in dict1.iterkeys()}