访问Python字典中列表中的项目

15

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

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

我想做的是使用if语句,如果我搜索的项在字典中的任何一个列表中,它将返回键。这是我尝试的代码:

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

但是它并没有执行任何操作,输出应该是:

cheese

这看起来像是一个简单的问题,但我就是想不出来。任何帮助都很棒。

3个回答

15

你需要使用一个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相关联的所有键。但是在内部仍然进行某种迭代。


如果我想要“访问”与每个键相关联的列表,并在for循环内将其转换为temp_array,以进行自己的计算怎么办?假设我必须检查有关列表值的某些内容。在我的情况下,这些列表仅包含整数数字。 - FaCoffee
1
@FrancescoCastellani 取决于你实际的使用情况;你可以在任何迭代中访问 mydict[key],就像第一个片段中那样;或者你可以像这样做:map(mydict.values(), own_calculations) - phipsgabler

4
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`列表来查找一个项目。

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

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

这个方法是可行的,但是由于字典的定义方式,你需要像cheese、vegetables等一样引用字典中的键值。希望这有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接