Python字典推导式报错unhashable type: dict的解决求助
解决字典列表转换后合并为单字典的问题
你遇到的unhashable type: dict错误,本质是因为集合的元素必须是可哈希类型,而字典是可变、不可哈希的,所以不能用集合推导式来生成目标字典。而且你的核心需求是把多个转换后的字典合并成一个大字典,集合推导式从结构上就不符合你的目标。
下面给你几种实用的解决方案:
方法1:循环+update(最直观易读)
初始化一个空字典,遍历每个原始字典,经过transform处理后,用update方法把转换后的字典键值对合并进去:
dictname = [{"key1":"val1","key2":"val2"},{"key3":"value3"}] def transform(each): return each # 实际场景替换为你的转换逻辑 final_dict = {} for item in dictname: transformed_data = transform(item) final_dict.update(transformed_data)
如果转换后的字典存在重复键,后面的键值对会覆盖前面的,这是Python字典合并的默认行为。
方法2:字典推导式(简洁写法)
用嵌套的字典推导式,直接遍历所有转换后字典的键值对:
final_dict = {k: v for item in dictname for k, v in transform(item).items()}
方法3:itertools.chain(高效扁平化)
如果你的字典列表很大,用itertools.chain来扁平化所有键值对会更高效:
from itertools import chain final_dict = dict(chain.from_iterable(transform(item).items() for item in dictname))
关键注意点
- 上述三种方法的效果一致:都会将所有转换后的字典键值对合并为一个字典,重复键会被后续的覆盖。
- 如果你的业务需要保留重复键的所有值(比如把值转为列表),可以额外处理,比如:
final_dict = {} for item in dictname: transformed_data = transform(item) for k, v in transformed_data.items(): if k in final_dict: final_dict[k].append(v) else: final_dict[k] = [v]
内容的提问来源于stack exchange,提问作者user16798185
相关产品推荐
相关产品推荐

