【问题标题】:Create new dictionary of value combinations from another dictionary从另一个字典创建新的值组合字典
【发布时间】:2022-10-05 23:01:13
【问题描述】:

我有以下字典。

dict = {}
dict[\'key1\'] = [\'A\', \'B\', \'C\']
dict[\'key2\'] = [\'B\', \'D\']
dict[\'key3\'] = [\'A\', \'C\', \'E\']

我想创建一个新字典,其中包含同一列表中其他字母的所有字母组合。

我希望最终结果看起来像这样。


{
    \'A\': [\'B\', \'C\', \'E\'], 
    \'B\': [\'A\', \'C\', \'D\'], 
    \'C\': [\'A\', \'B\', \'E\'],
    \'D\': [\'B\'],
    \'E\': [\'A\', \'C\']
}

我试图初始化一个新的空列表字典并遍历每个列表以获取组合并附加到列表字典,但我似乎遗漏了一些东西。

dict = {}
dict[\'key1\'] = [\'A\', \'B\', \'C\']
dict[\'key2\'] = [\'B\', \'D\']
dict[\'key3\'] = [\'A\', \'C\', \'E\']

dict2={}
list = [\'A\', \'B\', \'C\', \'D\', \'E\']

# instantiate dict2
for i in list:
    dict2[i]=[]

for idx, key in enumerate(dict):
    print(key, dict[key])
    tmp = dict[key]
        for x in tmp:
           tmp.remove(x)
           for y in tmp:
               dict2[x].append(y)

    标签: python


    【解决方案1】:

    我建议使用集合的字典作为中间步骤,然后转换为最终结果的列表:

    # Initial data.  (Don't use 'dict' as a variable name!)
    my_dict = {
        'key1': ['A', 'B', 'C'],
        'key2': ['B', 'D'],
        'key3': ['A', 'C', 'E'],
    }
    
    # Build all combinations as a dict of sets.
    all_combos = {}
    for v in my_dict.values():
        for x in v:
            all_combos.setdefault(x, set()).update(v)
            all_combos[x].remove(x)
    
    # Convert dict of sets to dict of sorted lists.
    final_dict = {k: sorted(v) for k, v in all_combos.items()}
    
    from pprint import pprint
    pprint(final_dict)
    

    印刷:

    {'A': ['B', 'C', 'E'],
     'B': ['A', 'C', 'D'],
     'C': ['A', 'B', 'E'],
     'D': ['B'],
     'E': ['A', 'C']}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-04-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-04
      • 2022-11-15
      • 2021-03-09
      • 2015-01-30
      相关资源
      最近更新 更多