2017-06-28 79 views
2

我有一個字典出現問題,我想將其拆分爲另外兩個字符。字典更新序列元素#0的長度爲3;使用元組進行更新時需要2個

dico={'GA1': {'main': 1, 'middle': 1, 'sub': 1}, 
     'GA2': {'main': 1, 'middle': 1, 'sub': 2}, 
     'GA3': {'main': 1, 'middle': 1, 'sub': 3}, 
     'GA4': {'main': 1, 'middle': 1, 'sub': 4}, 
     'GA5': {'main': 1, 'middle': 1, 'sub': 5}, 
     'GA6': {'main': 1, 'middle': 1, 'sub': 6}, 
     'GA7': {'main': 1, 'middle': 1, 'sub': 7}, 
     'GA8': {'main': 1, 'middle': 1, 'sub': 8}, 
     'GA9': {'main': 1, 'middle': 1, 'sub': 9}, 
     'GA10': {'main': 1, 'middle': 1, 'sub': 10}} 

我想把GA2和GA6在字典d1和GA1和GA3對GA10到GA5在字典D2。

當我將其轉化爲一個列表,我最終像tupples,

list(dico.items())[0] 

其給出( 'GA1',{ '主':1, '中等':1, '子': 1}) 當我要將此到我的新詞典,

d2 = {} 
d2.update(list(dico.items())[0]) 

我結束了「builtins.ValueError:詞典更新序列元素#0具有長度3; 2是必需的」

是字典無效f一個元組元素的ormat?

感謝您的幫助

亞歷山大

回答

0
d1 = { k:dico[k] for k in ['GA2','GA6','GA10'] } 
print (d1) 

輸出:

{'GA2': {'main': 1, 'middle': 1, 'sub': 2}, 'GA6': {'main': 1, 'middle': 1, 'sub': 6}, 'GA10': {'main': 1, 'middle': 1, 'sub': 10}} 
+0

這一個工程以及!我覺得它更優雅;) –

+0

非常感謝你 –

1

你說這個?

d2.update([list(dico.items())[0]]) 

可以初始化與元組的列表的字典。你只提供一個元組,不在列表中。使用[]初始化一個單列表,並傳遞:

{'GA10': {'middle': 1, 'main': 1, 'sub': 10}} 

而且,做list(dico.items())然後取第0個元素是一種浪費。如果可以的話,考慮改變你的方法來解決你的問題。

+0

'd2.update([(dico.items())[0]])' - 給出'類型錯誤:'dict_items'對象不支持索引' – RomanPerekhrest

+0

現在好多了 – RomanPerekhrest

+0

這個工作:)謝謝 –

0

創建你想要的鍵的列表,然後使用詞典理解。下面的代碼創建一個字典,d2,帶有GA1,GA8和GA9鍵值對。

newkeys = ['GA1', 'GA8', 'GA9'] 

d2 = {k: dico[k] for k in set(newkeys) & set(dico.keys())} 

看到Filter dict to contain only certain keys?更多信息

+0

非常感謝你 –

相關問題