对字典的值"grouping by"另一个字典中的键值求和



我有一本字典,看起来像这个

x = {'a': 2,
'b': 3,
'c': 3,
'd': 5,
'e': 4,
'f': 3,
'g': 5,
'h': 9}

而另一本看起来像这样的词典:

y = {'a': 'A',
'b': 'B',
'c': 'B',
'd': 'B',
'e': 'D',
'f': 'C',
'g': 'C',
'h': 'D'}

我想做的是创建一个新的字典,看起来像这样:

z = {'A': 2,
'B': 11,
'C': 8,
'D': 13}

所以基本上";分组依据";根据y中的值计算x中的元素并求和。例如,在y中,"b","c","d"属于"b",所以在z中,我们将有b=3+5+11,

z = {}
for k, v in y.items():
z.setdefault(v, 0)
z[v] += x[k]
print(z)

打印:

{'A': 2, 'B': 11, 'D': 13, 'C': 8}

我认为defaultdict是一个可读性很强的解决方案:

from collections import defaultdict
z = defaultdict(int)
for k,v in y.items():
z[v]+= x[k]

类似于@Andrej解决方案,但有点效率。

Python方式:

z = {key: sum(x[elt] for elt,val in y.items() if val==key) for key in y.values()}
print(z)
# {'A': 2, 'B': 11, 'D': 13, 'C': 8}