我有一本这样的字典:
data = {'building': ['school', 'hospital', 'church'],
'fruits': ['mango', 'apple', 'banana'] }
现在我想在搜索到该键的值时提取该键。例如,如果用户输入 mango 它应该打印 fruit 我该怎么做?
答案 0 :(得分:1)
您可以将生成器表达式传递给 next()
并获取与您的字符串匹配的第一个值。 next()
接受一个可选值(此处为 None
)以在 if 不返回任何内容时返回:
data = {'building': ['school', 'hospital', 'church'],
'fruits': ['mango', 'apple', 'banana'] }
next((k for k, v in data.items() if 'mango' in v), None)
# 'fruits'
# None if it can't be found
next((k for k, v in data.items() if 'turtle' in v), None)
# None
如果给定的项可能有多个键,则可以返回列表并获取所有键:
data = {'building': ['school', 'hospital', 'church', 'apple'],
'fruits': ['mango', 'apple', 'banana'] }
[k for k, v in data.items() if 'apple' in v]
# ['building', 'fruits']
如果这是你经常做的事情,你可以考虑反转字典,因为如果搜索所有列表可能效率低下。这可能是一个字典,其中每个键是当前列表中的字符串,值是类别。然后就可以直接查了。
答案 1 :(得分:0)
据我所知,无法直接执行此操作,但您可以尝试对字典的值采用迭代方法:
data = {'building': ['school', 'hospital', 'church'],
'fruits': ['mango', 'apple', 'banana'] }
def get_category(item):
for category, contents in data.items():
if item in contents:
return category
return None #Not found case
#Example
print(get_category("mango")) #Output: fruits
答案 2 :(得分:0)
我通过分别创建字典值和键的列表然后比较索引来解决这个问题。
category_list = list(dict.keys())
value_list = list(dict.values())
def find_category(value):
for values in value_list:
if value in values:
print((category_list[(value_list.index(values))]))
以这种方式检查 values_list 的嵌套索引,它返回(index1, index2)。我只使用 index1,因为它会给出 category_list 中的关键索引。