15

我有一个字典,其中包含与列表关联的键。

mydict = {'fruits': ['banana', 'apple', 'orange'],
         'vegetables': ['pepper', 'carrot'], 
         'cheese': ['swiss', 'cheddar', 'brie']}

我想要做的是使用 if 语句,如果我在字典中的任何列表中搜索 item 及其它将返回键。这就是我正在尝试的:

item = cheddar
if item in mydict.values():
    print key 

但它什么也没做,输出应该是:

cheese

这似乎是一件简单的事情,但我就是想不通。任何帮助都很棒。

4

3 回答 3

15

您必须使用 a 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。但在内部,仍然存在某种迭代。

于 2012-06-15T19:37:00.537 回答
3
mydict = {'fruits': ['banana', 'apple', 'orange'],
     'vegetables': ['pepper', 'carrot'], 
     'cheese': ['swiss', 'cheddar', 'brie']}

item = "cheddar"
if item in mydict['cheese']:
    print ("true")

这行得通,但是由于您制作字典的方式,您必须参考字典中的键,例如奶酪,蔬菜等,希望这会有所帮助!

于 2012-06-15T19:22:03.080 回答
3
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每次都遍历列表来查找项目。

于 2012-06-16T02:29:58.070 回答