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

Python含字典元素列表去重抛unhashable type异常解决方法

报错原因

你使用的list(dict.fromkeys(my_list))去重方案,依赖字典键的唯一性实现去重,要求序列元素必须是可哈希类型。你的列表元素是包含字典的元组,字典属于可变类型,天生不支持哈希,因此运行时会抛出unhashable type: 'dict'异常。

修复方案

手动遍历列表,为每个元素生成可哈希的唯一标识,记录已出现的标识,遇到重复项直接跳过即可,完全符合「元素100%相同即判定为重复」的规则。

针对当前固定结构的轻量实现

不需要引入额外依赖,直接把嵌套字典转为可哈希的元组作为判重依据:

my_list = [('admin', '', {'type': 'telnet'}), ('admin', '', {'type': 'telnet'})]

seen = set()
deduplicated_list = []
for item in my_list:
    # 将嵌套字典转为排序后的键值对元组,生成可哈希的唯一判重键
    unique_key = (
        item[0],
        item[1],
        tuple(sorted(item[2].items()))
    )
    if unique_key not in seen:
        seen.add(unique_key)
        deduplicated_list.append(item)

my_list = deduplicated_list

运行后示例列表会正确去重,最终值为[('admin', '', {'type': 'telnet'})]。

适配复杂嵌套结构的通用实现

如果你的元组后续可能出现更复杂的嵌套结构(比如多层字典、嵌套列表),可以用JSON序列化生成判重键,不需要手动处理类型转换:

import json

my_list = [('admin', '', {'type': 'telnet'}), ('admin', '', {'type': 'telnet'})]
seen = set()
deduplicated_list = []
for item in my_list:
    # sort_keys=True 保证键顺序不同但内容一致的字典会被判定为重复
    unique_key = json.dumps(item, sort_keys=True, ensure_ascii=False)
    if unique_key not in seen:
        seen.add(unique_key)
        deduplicated_list.append(item)

my_list = deduplicated_list

注意:JSON序列化方案仅适用于元素可被JSON序列化的场景,如果包含自定义类实例等无法序列化的对象,还是需要手动转换结构生成判重键。

内容的提问来源于stack exchange,提问作者Roi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:15:29