2017-05-30 34 views
0

我的字典使用相同的密鑰名稱的列表,我想鞏固字典成一個字典,平均值僅在基於數字值:合併X Python字典到1聚合值

[{'a': 3, 'b': 'm', 'c': 7}, 
{'a': 1.0, 'b': 'm', 'c': 2}, 
{'a': 5, 'b': 'm', 'c': 4.0}] 

到平均詞典:

[{'a': 3, 'b': 'm', 'c': 4}] 

回答

1

如果你可以假設你已經在列表中至少有一個快譯通和所有類型的字典有所有的按鍵,你可以這樣做:

import numbers 
dicts =[{'a': 3, 'b': 'm', 'c': 7}, 
{'a': 1.0, 'b': 'm', 'c': 2}, 
{'a': 5, 'b': 'm', 'c': 4.0}] 

avg_dict = {} 
for key in dicts[0]: 
     avg_dict[key] = sum([d[key] for d in dicts])/len(dicts) if isinstance(dicts[0][key], numbers.Number) else dicts[0][key] 
+0

這是偉大的,工作一種享受。感謝您的回覆。 – matoneski

1

也許不是最Python的方式,但它會做的工作:

lst = [{'a': 3, 'b': 'm', 'c': 7}, 
     {'a': 1.0, 'b': 'm', 'c': 2}, 
     {'a': 5, 'b': 'm', 'c': 4.0}] 

result = {} 

for item in lst: 
    for j in item: 
     if type(item[j]) == str: 
      result[j] = item[j] 
     elif j in result: 
      result[j] += item[j] 
     else: 
      result[j] = item[j] 

for i in result: 
    if type(result[i]) != str: 
     result[i] = int(result[i]/len(lst)) 

print(result)