从多个字典中生成所有键组合,同时对它们的值求和

问题描述 投票:0回答:1

假设我有 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,所以要考虑到这一点。

python dictionary combinations
1个回答
0
投票
您可以使用

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}
    
© www.soinside.com 2019 - 2024. All rights reserved.