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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 16:12:47