Python按指定键合并字典列表值 解决unhashable type:list报错
报错根因
unhashable type: 'list' 报错是因为你在做分组聚合时,误将可变类型的列表(也就是favorite_color字段的值)作为了字典键/集合元素。Python中只有不可变类型(字符串、数字、元组等)支持哈希运算,能作为字典键使用,列表不满足这个要求。
实现方案
聚合时固定用name字段作为唯一分组键,遍历原始数据时把同名字段下的所有颜色值合并,最后转换为目标字典列表结构即可,不需要对列表做哈希操作。
可直接运行的代码:
from collections import defaultdict # 原始输入数据 source_data = [ {'name': 'john doe', 'favorite_color': ['red']}, {'name': 'jane doe', 'favorite_color': ['pink']}, {'name': 'john doe', 'favorite_color': ['blue', 'green']}, {'name': 'jane doe', 'favorite_color': ['grey', 'white']} ] color_map = defaultdict(list) for entry in source_data: # 用字符串类型的name做键,完全规避列表哈希问题 color_map[entry['name']].extend(entry['favorite_color']) # 组装为目标格式 final_result = [ {"name": user, "favorite_color": color_list} for user, color_list in color_map.items() ]
输出验证
执行代码后得到的输出和需求结构完全匹配:
[ {'name': 'john doe', 'favorite_color': ['red', 'blue', 'green']}, {'name': 'jane doe', 'favorite_color': ['pink', 'grey', 'white']} ]
你给出的预期示例存在两处笔误:一是
jane done为拼写错误,正确应为jane doe;二是字典括号错位,把favorite_color键写到了字典外部,上述代码已经修正了结构问题。
内容的提问来源于stack exchange,提问作者talostsoul
相关产品推荐
相关产品推荐

