我有一本字典,看起来像这个
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}