You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从现有字典生成字母间关联组合的新字典?

问题

给定如下字典:

original_dict = {
    'key1': ['A', 'B', 'C'],
    'key2': ['B', 'D'],
    '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)
解决方案

原代码的问题

  • 修改原列表导致遍历异常:tmp = dict[key]是对原列表的引用,tmp.remove(x)会直接修改原字典中的列表,导致后续遍历丢失元素。
  • 语法错误:for x in tmp:的缩进不正确,会引发IndentationError。
  • 重复元素未处理:直接append会导致同一关联被多次添加(比如A和B在key1中关联,若其他列表也包含两者,会重复添加)。

正确实现

original_dict = {
    'key1': ['A', 'B', 'C'],
    'key2': ['B', 'D'],
    'key3': ['A', 'C', 'E']
}

# 初始化结果字典,先收集所有出现的字母
result = {}
all_chars = set()
for chars in original_dict.values():
    all_chars.update(chars)
for char in all_chars:
    result[char] = []

# 遍历每个列表处理关联关系
for chars in original_dict.values():
    # 遍历列表中的每个字符
    for idx, current in enumerate(chars):
        # 关联当前字符与列表中其他所有字符
        for other in chars[:idx] + chars[idx+1:]:
            if other not in result[current]:
                result[current].append(other)

print(result)

代码说明

  1. 规范变量命名:使用original_dict代替dict,避免覆盖Python内置的dict类型。
  2. 自动收集字母:无需手动指定字母列表,通过遍历原字典的值自动收集所有出现的字母,适配数据变化。
  3. 安全遍历不修改原数据:通过chars[:idx] + chars[idx+1:]获取当前字符以外的所有元素,不会修改原列表。
  4. 去重处理:添加关联前检查是否已存在,确保每个关联只出现一次。

运行后将得到预期的结果。

内容的提问来源于stack exchange,提问作者Jay

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 10:55:17