2017-05-30 75 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)