Python如何实现值为列表的字典反转,解决列表不可哈希问题
解决方案
核心修改思路
原来的代码直接将原字典的整个值作为新字典的键,一方面会因为列表不可哈希触发报错,另一方面也不符合你要拆分列表元素为新键的需求。修改后逻辑同时兼容值为非列表(字符串、数字等)和列表的场景:
- 遇到值为列表时,遍历列表内的每一个元素作为新键
- 遇到值为其他可哈希类型时,保留原有逻辑直接将整体作为新键
- 新增重复原键过滤逻辑,避免原列表内重复元素导致同一个原键被多次存入新键的列表中
调整后代码
def again(input_dict): result_dict = {} for key, value in input_dict.items(): # 列表类型拆分元素作为新键 if isinstance(value, list): for elem in value: if elem not in result_dict: result_dict[elem] = [] # 避免同一个原key重复添加 if key not in result_dict[elem]: result_dict[elem].append(key) # 非列表类型沿用原有逻辑 else: if value not in result_dict: result_dict[value] = [] result_dict[value].append(key) return result_dict
效果验证
测试你给出的两个用例:
- 普通字符串值字典:
a = {'A':'red', 'B':'blue', 'C':'cyan'}
调用返回:{'red': ['A'], 'blue': ['B'], 'cyan': ['C']},符合预期 - 列表值字典:
b = {'A':[1,1,2,4], 'B':[1,2,5]}
调用返回:{1 : ['A', 'B'], 2 : ['A', 'B'], 4 : ['A'], 5 : ['B']},符合预期
内容的提问来源于stack exchange,提问作者JAMPS
相关产品推荐
相关产品推荐

