2017-10-09 97 views
2

在dict3中獲得結果有沒有更簡單的方法?在詞典中實現結果的最佳pythonic方法

我需要dict3得到這樣的:

{'Runes': ['Ber', 'Ko'], 
'Swords': ['Long swords', 'Short sword'], 
'Gold': ['12','125'], 
'Coal':[], 
'Wood': [], 
'Water':['21']} 

這裏是我的不是最佳的解決方案:

dict1 = {'Runes':['Ber','Ko'],'Swords':['Long sword'],'Gold':['','12','',''], 'Coal':['','']} 
dict2 = {'Swords':['Short sword'],'Gold':['125'],'Wood':['',''],'Water':['','', '21'], 'Coal':['']} 
dict3 = {} 

for k1 in dict1.keys(): 
    if k1 not in dict3.keys(): 
     dict3.setdefault(k1, '') 

for k2 in dict2.keys(): 
    if k2 not in dict3.keys(): 
     dict3.setdefault(k2, '') 

for k3,v3 in dict3.items(): 
    for k1,v1 in dict1.items(): 
     if k3 == k1: 
      dict3[k3] = v1 

for k3,v3 in dict3.items(): 
    for k2,v2 in dict2.items(): 
     if k3 == k2 and type(v3) == str: 
      dict3[k3] = v2 

for k3,v3 in dict3.items(): 
    for k2,v2 in dict2.items(): 
     if k3 == k2 and v2 not in v3 and v2 != v3: 
      dict3[k3] = v3 + v2 

for k3,v3 in dict3.items(): 
    for k2,v2 in dict2.items(): 
     if k3 == k2 and '' in v3: 
      s = [] 
      for i in v3: 
       if i not in ['']: 
        s.append(i) 
      dict3[k3] = s 
+0

其中python版本是你的目標是? – Miket25

+0

+3.5會好的 –

回答

2

我會用defaultdict(這樣你就不必檢查一個給定的密鑰已存在於字典中),並且filter刪除空值:

from collections import defaultdict 

dict3 = defaultdict(list) 
all_dicts = [dict1, dict2] 

for data in all_dicts: 
    for key, values in data.items(): 
     values = filter(len, values) 
     dict3[key].extend(values) 
+0

它看起來更酷:)謝謝! –

相關問題