假设我有一个这样的字典:
d = {'Q1': ['10', '11', '12'], 'Q2': ['01', '02', '03'],
'Q3': ['04', '05', '06'], 'Q4': ['07', '08', '09'] }
还有一个变量:s = '04'
我的目标是在d
中找到与值列表中的s
相对应的键。因此,我想返回“ Q3”。
for k, v in d.items():
for item in v:
if s == item:
print(d[v])
以上内容引发了TypeError: unhashable type: 'list
。在不更改字典结构的情况下,如何实现我的目标?
答案 0 :(得分:1)
您可以使用in
来检查元素是否在列表中,而列表中没有其他for
:
d = {'Q1': ['10', '11', '12'], 'Q2': ['01', '02', '03'],
'Q3': ['04', '05', '06'], 'Q4': ['07', '08', '09']}
s = '04'
for k, v in d.items():
if s in v:
print(k, d[k])
输出:
Q3 ['04', '05', '06']
您得到TypeError
的原因是您试图将列表(v
)用作字典键(d[v]
),但是由于列表不可散列,因此无法键,而应使用既正确又直观的d[k]
(因为k
是key
)。