如何用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
相关产品推荐
相关产品推荐

