基于Python中的键的多个词典中的平均值?

时间:2015-12-07 17:23:56

标签: python dictionary

我有三个词典(或更多):

A = {'a':1,'b':2,'c':3,'d':4,'e':5}
B = {'b':1,'c':2,'d':3,'e':4,'f':5}
C = {'c':1,'d':2,'e':3,'f':4,'g':5}

如何获取三个词典中每个键的平均值的字典?

例如,给定上面的词典,输出将是:

{'a':1/1, 'b':(2+1)/2, 'c':(3+2+1)/3, 'd':(4+3+2)/3, 'e':(5+4+3)/3, 'f':(5+4)/2, 'g':5/1}

4 个答案:

答案 0 :(得分:6)

您可以使用Pandas,如下所示:

import pandas as pd
df = pd.DataFrame([A,B,C])
answer = dict(df.mean())
print(answer)

答案 1 :(得分:3)

我用Counter来解决这个问题。请尝试以下代码:)

from collections import Counter

A = {'a':1,'b':2,'c':3,'d':4,'e':5}
B = {'b':1,'c':2,'d':3,'e':4,'f':5}
C = {'c':1,'d':2,'e':3,'f':4,'g':5}

sums = Counter()
counters = Counter()
for itemset in [A, B, C]:
    sums.update(itemset)
    counters.update(itemset.keys())

ret = {x: float(sums[x])/counters[x] for x in sums.keys()}

print ret

答案 2 :(得分:0)

最简单的方法是使用collections.Counter解释here,如下所示:

from collections import Counter

sums = dict(Counter(A) + Counter(B) + Counter(C))
# Which is {'a': 1, 'c': 6, 'b': 3, 'e': 12, 'd': 9, 'g': 5, 'f': 9}

means = {k: sums[k] / float((k in A) + (k in B) + (k in C)) for k in sums}

结果将是:

>>> means
{'a': 1.0, 'b': 1.5, 'c': 2.0, 'd': 3.0, 'e': 4.0, 'f': 4.5, 'g': 5.0}

答案 3 :(得分:0)

如果您使用的是python 2.7或3.5,则可以使用以下命令:

keys = set(A.keys()+B.keys()+C.keys())

D = {key:(A.get(key,0)+B.get(key,0)+C.get(key,0))/float((key in A)+(key in B)+(key in C)) for key in keys}

输出

 D
{'a': 1.0, 'c': 2.0, 'b': 1.5, 'e': 4.0, 'd': 3.0, 'g': 5.0, 'f': 4.5}

如果您不想使用任何包。这在python 2.6及以下版本中不起作用。