在嵌套字典中获取键

时间:2021-07-04 20:46:31

标签: python dictionary

我有一本这样的字典:

data = {'building': ['school', 'hospital', 'church'],
        'fruits': ['mango', 'apple', 'banana'] }

现在我想在搜索到该键的值时提取该键。例如,如果用户输入 ma​​ngo 它应该打印 fruit 我该怎么做?

3 个答案:

答案 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 中的关键索引。