如何从现有字典生成字母间关联组合的新字典?
问题
给定如下字典:
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)
代码说明
- 规范变量命名:使用
original_dict代替dict,避免覆盖Python内置的dict类型。 - 自动收集字母:无需手动指定字母列表,通过遍历原字典的值自动收集所有出现的字母,适配数据变化。
- 安全遍历不修改原数据:通过
chars[:idx] + chars[idx+1:]获取当前字符以外的所有元素,不会修改原列表。 - 去重处理:添加关联前检查是否已存在,确保每个关联只出现一次。
运行后将得到预期的结果。
内容的提问来源于stack exchange,提问作者Jay
相关产品推荐
相关产品推荐

