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

如何用Python列表匹配字典取值?解决unhashable type: list报错

问题解决思路与修正代码

错误原因

你触发的unhashable type: 'list'错误,核心是最后一行代码print(grocery_market[shopping_list])试图把整个列表shopping_list作为字典的键来取值,但字典的键必须是可哈希类型(比如字符串、整数),而列表属于不可哈希类型,所以直接报错。

你的需求是把输入的购物列表和字典交叉校验,提取对应值到新列表,正确逻辑应该是逐个遍历购物列表里的元素,而非用整个列表当键。

修正方案

步骤说明

  • 新增一个空列表用于存储匹配到的字典值
  • 遍历购物列表中的每一项,检查是否存在于字典的键集合中
  • 若存在,将对应的值添加到结果列表;若不存在可选择跳过或添加提示

修正后的代码

grocery_market = {"food": 2}

shopping_list = []
matched_values = []  # 存储匹配到的值
max_shop_list = 2

while len(shopping_list) < max_shop_list:
    item = input("Add an item: ")
    shopping_list.append(item)
    print(shopping_list)

# 遍历购物列表,交叉校验并提取值
for item in shopping_list:
    if item in grocery_market:
        matched_values.append(grocery_market[item])
    # 可选:处理不在字典中的项
    # else:
    #     print(f"{item} 不在商品字典中")

print("匹配到的对应值列表:", matched_values)

代码解释

  • 当你两次输入"food"时,遍历过程会两次匹配到字典中的"food"键,结果列表matched_values会得到[2, 2]
  • 若输入了字典中没有的项(比如"drink"),代码会自动跳过(如果打开注释的else块,会打印提示信息)

内容的提问来源于stack exchange,提问作者The Fearsome Asian

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 22:19:23