Python字典列表作为值-合并元素

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

我有一本以值列表的字典。我想将每个元素都结合在一起,但只针对不同的键。该组合应存储在另一本词典中。该词典应具有'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个模拟人生。

感谢您的帮助!

最好的问候,最大值

python dictionary combinations
1个回答
0
投票

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