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

Python值为列表的字典求交集时报TypeError: unhashable type: 'list'

解决字典值列表交集的TypeError问题

你遇到的TypeError: unhashable type: 'list'错误,是因为列表是可变类型,无法被哈希,所以不能直接对包含列表值的字典项使用集合交集操作。

解决方案一:使用字典推导式结合集合交集

通过将列表转换为集合来计算交集,再转回列表(如果需要):

a = {
    'q1': ['d5', 'd6', 'd90', 'd91', 'd119', 'd144', 'd181', 'd399'],
    'q2': ['d236', 'd166'],
    'q3': ['d552', 'd401', 'd1297', 'd1296'],
    'q4': ['d99', 'd115', 'd257', 'd258'],
    'q5': ['d20', 'd56', 'd57', 'd58', 'd19']
}

b = {
    'q1': ['d707', 'd144', 'd542', 'd329', 'd395', 'd730', 'd158', 'd77', 'd486', 'd623'],
    'q2': ['d189', 'd575', 'd179', 'd1182', 'd160', 'd188', 'd660', 'd1061', 'd173', 'd185'],
    'q3': ['d730', 'd329', 'd1066', 'd14', 'd163', 'd401', 'd753', 'd44', 'd92', 'd368'],
    'q4': ['d798', 'd97', 'd99', 'd927', 'd1195', 'd131', 'd257', 'd315', 'd151', 'd193'],
    'q5': ['d189', 'd1347', 'd423', 'd1040', 'd174', 'd1231', 'd197', 'd721', 'd1307', 'd1352']
}

# 计算共享键对应值的交集
intersection_dict = {
    key: list(set(a[key]) & set(b[key]))
    for key in a.keys() & b.keys()
}

print(intersection_dict)

运行结果:

{
 'q1': ['d144'],
 'q2': [],
 'q3': ['d401'],
 'q4': ['d99', 'd257'],
 'q5': []
}

解决方案二:保留原列表顺序(若需要)

如果需要保留原列表的顺序,或者处理有重复元素的情况,可以用列表推导式:

intersection_dict = {
    key: [item for item in a[key] if item in set(b[key])]
    for key in a.keys() & b.keys()
}

这种方式会保留a中列表的元素顺序,同时筛选出存在于b列表中的元素。

错误原因说明

你最初使用的dict(ret_docs.items() & reljudges.items())试图直接对字典的项(键值对)求交集,但由于值是列表(不可哈希),集合无法包含这类元素,因此抛出TypeError。必须先针对每个键对应的值列表单独计算交集,而不是对整个字典项进行集合操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:54:26