我有一本以值列表的字典。我想将每个元素都结合在一起,但只针对不同的键。该组合应存储在另一本词典中。该词典应具有'sim_1'
,'sim_2'
等键。这些值将是一个列表。此列表包含几个元组。元组的第一个元素将是旧键,第二个元素将是组合元素。让我们假设以下示例:
dict_old = {'a': ['r1'],
'b': ['r1', 'r2', 'r3'],
'c': ['r1', 'r2', 'r3'],
'd': ['r1'],
'e': ['r1', 'r2']}
dict_new = {'sim_1': [('a', 'r1'), ('b', 'r1'), ('c', 'r1'), ('d', 'r1'), ('e', 'r1')]
'sim_2': [('a', 'r1'), ('b', 'r2'), ('c', 'r1'), ('d', 'r1'), ('e', 'r1')],
'sim_3':...}
对于'sim_2'
,仅'b'
已更改。总共将有18个模拟人生。
感谢您的帮助!
最好的问候,最大值
使用itertools
程序包的product
功能,您可以获得组合列表。结合一些字典逻辑,您将可以进入dict_new
:
import itertools
dict_old = {'a': ['r1'],
'b': ['r1', 'r2', 'r3'],
'c': ['r1', 'r2', 'r3'],
'd': ['r1'],
'e': ['r1', 'r2']}
dict_values = dict_old.values()
dict_keys = dict_old.keys()
combinations = itertools.product(*dict_values)
dict_new = {}
for sim_count, combination in enumerate(combinations):
sim_key = 'sim_'+str(sim_count+1)
dict_new[sim_key] = []
for i, key in enumerate(dict_keys):
tuple = (key,combination[i])
dict_new[sim_key].append(tuple)