2013-07-19 75 views
0

我有兩個字典如何結合兩個字典?一個字典爲重點,另一個字典作爲價值

Dict0 = {'a':0, 'b':1, 'c':2} 

Dict1 = {0 : {'a0' : 0,'a1' : 1,'a2' : 2}, 
     1 : {'b0' : 0,'b1' : 1,'b2' : 2}, 
     2 : {'c0' : 0,'c1' : 1,'c2' : 2}} 

我想獲得一個結合字典CombDict,它使用的Dict0作爲CombDict值鍵,並且使用的Dict1值作爲鍵爲CombDict

CombDict = {{'a0':0,'a1':1,'a2':2}:'a',{'b0':0,'b1':1,'b2':2}'b',{'c0':0,'c1':1,'c2':2}:'c'} 

我知道這是非常基本的。我的邏輯代碼是寫的,但肯定是錯的。

CombDict = {} 
for k0, v0 in Dict0: 
    CombDict.values()= k0 
    for k1,v1 in Dict1: 
     CombDict.keys() = v1 

任何建議?謝謝。 順便說一句,如果你想讓字典對你更有意義,只需編輯它們。

+4

字典不能鍵 – TerryA

+2

你'Dict1'密鑰無效;字典是可變的,因此不可拆分並且不能用作密鑰。 –

+0

我明白了。謝謝。如果我改變'Dict 1',似乎現在需要,如何組合子句,我該用什麼? – Shengen

回答

2

因爲字典是可變的,所以你不能使用字典作爲另一個字典的關鍵字或將它們存儲在一個集合中。

你必須捕捉字典的不可變「快照」來代替:

def dict_to_key(d): 
    return tuple(sorted(d.items())) 

提供的字典中的值是不可變的或者,你可以使用dict_to_key()功能鍵的返回值來代替。

現在可以生成合並詞典:

CombinedDict = {dict_to_key(Dict1[v]): k for k, v in Dict0.items()} 

演示:

>>> Dict0 = {'a':0, 'b':1, 'c':2} 
>>> Dict1 = {0 : {'a0' : 0,'a1' : 1,'a2' : 2}, 
...   1 : {'b0' : 0,'b1' : 1,'b2' : 2}, 
...   2 : {'c0' : 0,'c1' : 1,'c2' : 2}} 
>>> def dict_to_key(d): 
...  return tuple(sorted(d.items())) 
... 
>>> {dict_to_key(Dict1[v]): k for k, v in Dict0.items()} 
{(('b0', 0), ('b1', 1), ('b2', 2)): 'b', (('a0', 0), ('a1', 1), ('a2', 2)): 'a', (('c0', 0), ('c1', 1), ('c2', 2)): 'c'} 
+0

太棒了。非常感謝你。任何文檔鏈接來解釋這個'{dict_to_key(Dict1 [v]):k代表k,v代表Dict0.items()}' – Shengen

+1

@Shengen:它是[字典理解](http://docs.python.org /2/reference/expressions.html#dictionary-displays)。 –

+0

這很有幫助,再次感謝。 – Shengen

相關問題