假设我有 n 不同大小的字典,dictA,...,dictN。它们都以字符串作为键,以正数作为值。我需要的是一个 dictComb,它的键是从 dictA 到 dictN 的所有键组合(每个字典一个键),每个组合的值等于组成键值的总和。
示例 (n=2): dictA = {"Beefsteak": 20, "Campari": 100}, dictB = {"McIntosh": 5, "Fuji": 11, "Honeycrisp": 32}
dictComb = {“麦金托什牛排”:25,“富士牛排”:31,“蜜脆牛排”:52,“金巴利麦金托什”:105,“金巴利富士”:111,“金巴利蜜脆”:132}
作为编码新手,我尝试了这样的事情:
for (a, b) in zip(dictA, dictB):
dictComb.update({" ".join([a, b]): sum([dictA[a], dictB[b]])})
不幸的是,这给出了: dictComb = {“麦金托什牛排”:25,“金巴利富士”:111}
网上没找到解决办法,所以来这里问问。另外,n 可能大到 18,所以要考虑到这一点。
itertools.product() 获取所有组合键:
import itertools
dictA = {"Beefsteak": 20, "Campari": 100}
dictB = {"McIntosh": 5, "Fuji": 11, "Honeycrisp": 32}
dicts = [dictA, dictB]
dictComb = {}
for keys in itertools.product(*dicts):
keyComb = " ".join(keys)
sum = 0
for i, key in enumerate(keys):
sum += dicts[i][key]
dictComb[keyComb] = sum
print(dictComb)
输出:
{'Beefsteak McIntosh': 25, 'Beefsteak Fuji': 31, 'Beefsteak Honeycrisp': 52, 'Campari McIntosh': 105, 'Campari Fuji': 111, 'Campari Honeycrisp': 132}