我有一个字典,其中包含与列表相关联的键。
mydict = {'fruits': ['banana', 'apple', 'orange'],
'vegetables': ['pepper', 'carrot'],
'cheese': ['swiss', 'cheddar', 'brie']}
我想要做的是使用if语句,如果我搜索项目及其在字典中的任何列表中,它将返回密钥。这就是我的尝试:
item = cheddar
if item in mydict.values():
print key
但它没有做任何事情,输出应该是:
cheese
这看起来很简单,但我无法弄明白。任何帮助都很棒。
答案 0 :(得分:9)
您必须使用for
,简单的if
不足以检查一组未知的列表:
for key in mydict.keys():
if item in mydict[key]:
print key
没有明确for
语句的方法可能是这样的:
foundItems = (key for key, vals in mydict.items() if item in vals)
返回与item
关联的所有密钥。但在内部,仍然会进行某种迭代。
答案 1 :(得分:2)
mydict = {'fruits': ['banana', 'apple', 'orange'],
'vegetables': ['pepper', 'carrot'],
'cheese': ['swiss', 'cheddar', 'brie']}
item = "cheddar"
if item in mydict['cheese']:
print ("true")
这是有效的,但你必须引用字典中的键,如奶酪,蔬菜等,因为你制作字典的方式,希望这有帮助!
答案 2 :(得分:2)
mydict = {'fruits': ['banana', 'apple', 'orange'],
'vegetables': ['pepper', 'carrot'],
'cheese': ['swiss', 'cheddar', 'brie']}
item = "cheddar"
for key, values in mydict.iteritems():
if item in values:
print key
如果您要进行大量此类搜索,我认为您可以为原始mydict
创建反向索引以加快查询速度:
reverse_index = {}
for k, values in mydict.iteritems():
for v in values:
reverse_index[v] = k
print reverse_index.get("cheddar")
print reverse_index.get("banana")
这样,每次查找项目时都不必遍历values
列表。