2016-11-26 134 views
0

我有幾本詞典這樣多個詞典追加到一個字典順序在python

dict1 = {0: 33.422, 1: 39.2308, 2: 30.132} 
dict2 = {0: 42.2422, 1: 43.342, 2: 42.424} 
dict3 = {0: 13.422, 1: 9.2308, 2: 20.132} 

我知道我可以將它們一起使用的代碼

dicts = dict1, dict2, dict3 

,並返回合併成一個字典這樣的結果

({0: 33.422, 1: 39.2308, 2: 30.132}, {0: 42.2422, 1: 43.342, 2: 42.424}, {0: 13.422, 1: 9.2308, 2: 20.132}) 

但是,如果字典co我順序?我怎樣才能得到相同的結果?我嘗試下面的代碼

dicts = {} 
dicts = dicts, dict1 
dicts = dicts, dict2 
dicts = dicts, dict3 

但它返回這樣的結果

((({}, {0: 33.422, 1: 39.2308, 2: 30.132}), {0: 42.2422, 1: 43.342, 2: 42.424}), {0: 13.422, 1: 9.2308, 2: 20.132}) 

我們怎樣才能刪除第一個東西嗎?我在Windows 7上使用python 3.所有字典都在avro軟件包下的「MyDataFileReader」類型中。

+1

'類型的字典= dict1,dict2,dict3'將創建一個元組,而不是一本字典......所以,你在做什麼只是創建元組的元組 – MMF

+0

當使用'雙重賦值'dict = dicts,dict1'時,基本上你正在創建一個'元組'。元組是不可變的,因此你不能用下面幾行添加任何東西('dicts = dicts,dict2'等),它只是創建一個包含舊元組的新元組。我不確定你想要什麼作爲最終的數據類型。你能詳細說明一下嗎? – Eljee

+0

你最終需要什麼樣的數據?你只是想結合多個字典? –

回答

0

如果我理解正確你想詞典列​​表:

dict1 = {0: 33.422, 1: 39.2308, 2: 30.132} 
dict2 = {0: 42.2422, 1: 43.342, 2: 42.424} 
dict3 = {0: 13.422, 1: 9.2308, 2: 20.132} 
dicts = [] 
dicts.append(dict1) 
dicts.append(dict2) 
dicts.append(dict3) 
1

由於@MMF在他的評論中已經指出:a, b, c創建包含abc一個元組(按順序)。

你想要做的,是 「更新」 的詞典內容:

dict = {} 
dict.update(dict1) 
dict.update(dict2) 
dict.update(dict3) 

或者,如果你不希望dict3dict2覆蓋東西:

dict = {} 
dict.update(dict3) 
dict.update(dict2) 
dict.update(dict1) 

或者

def update_without_overwriting(d, x): 
    dict.update({k: v for k, v in x.items() if k not in d}) 

dict = {} 
update_without_overwriting(dict, dict1) 
update_without_overwriting(dict, dict2) 
update_without_overwriting(dict, dict3) 

如果你只是想要一個包含所有字典的元組,但是使用這個:

dict = dict1, dict2 
dict += dict3, 
0

從你的例子的第一部分看來,你試圖得到一個字典的元組,而不是一個字典的字典。所以,試試這個:

dicts =() 
dicts = dicts + (dict1,) 
dicts = dicts + (dict2,) 
dicts = dicts + (dict3,) 

注意後面的逗號是必需的......