合并2个词典的最pythonic方法是什么,但是将值设为平均值?

TIM*_*MEX 5 python dictionary

d1 = { 'apples': 2, 'oranges':5 }
d2 = { 'apples': 1, 'bananas': 3 }


result_dict = { 'apples': 1.5, 'oranges': 5, 'bananas': 3 }
Run Code Online (Sandbox Code Playgroud)

最好的方法是什么?

Eli*_*sky 7

这是一种方式:

result = dict(d2)
for k in d1:
    if k in result:
        result[k] = (result[k] + d1[k]) / 2.0
    else:
        result[k] = d1[k]
Run Code Online (Sandbox Code Playgroud)


pha*_*t0m 6

这适用于任意数量的词典:

dicts = ({"a": 5},{"b": 2, "a": 10}, {"a": 15, "b": 4})
keys = set()
averaged = {}
for d in dicts:
    keys.update(d.keys())
for key in keys:
    values = [d[key] for d in dicts if key in d]
    averaged[key] = float(sum(values)) / len(values)
print averaged
# {'a': 10.0, 'b': 3.0}
Run Code Online (Sandbox Code Playgroud)

更新:@mhyfritz展示了如何将3行减少到1的方法!

dicts = ({"a": 5},{"b": 2, "a": 10}, {"a": 15, "b": 4})
averaged = {}
keys = set().union(*dicts)
for key in keys:
    values = [d[key] for d in dicts if key in d]
    averaged[key] = float(sum(values)) / len(values)
print averaged
Run Code Online (Sandbox Code Playgroud)