如何在具有列表作为其值的字典中搜索多个元素?

2024-10-04 05:32:02 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一本字典,它的值是列表

如何在列表中搜索与我要查找的元素(一个或多个)匹配的元素,并检索键&;将值对放入单独的字典中

我现在拥有的代码只允许我搜索单个元素,并将键只存储到结果中

dict = {
    "4Fingers Crispy Chicken":["Fast Food", "L1", "4Fingers Crispy Chicken"],
    "Aburi-EN":["Restaurant", "L1", "Aburi-EN"],
    "Ah Chiang's Porridge":["Eatery","B1","Ah Chiang's Porridge"],
    "BlackBall":["Dessert","B1", "BlackBall"],}
result=[]

value_to_search = input("Search:")

for key, val in dict.items():
        if value_to_search in val:
                result.append(key)
print(result)

有人能教我如何一次搜索多个元素并同时存储键和值吗


Tags: 元素l1列表字典resultdictb1en
2条回答

您可以将字典理解与if过滤一起使用

dic = {
    "4Fingers Crispy Chicken": ["Fast Food", "L1", "4Fingers Crispy Chicken"],
    "Aburi-EN": ["Restaurant", "L1", "Aburi-EN"],
    "Ah Chiang's Porridge": ["Eatery", "B1", "Ah Chiang's Porridge"],
    "BlackBall": ["Dessert", "B1", "BlackBall"],
}

value_to_search = input("Search:")

result = {
    k: v for k, v in dic.items()
    if value_to_search in v
}
print(result)

输出:

Search:B1
{"Ah Chiang's Porridge": ['Eatery', 'B1', "Ah Chiang's Porridge"], 'BlackBall': ['Dessert', 'B1', 'BlackBall']}

注:

  • 请注意重新绑定名称dict。这是一个固有的名字
  • 当您在display语法中使用尾随逗号时,最好在新行处加上括号(括号、大括号)-除了单元素元组(参见PEP8的第二段)

附加:

However, how would I go about searching for two values instead?

我假设分隔符是|

value_to_search = input("Search: ")

results = {
    target: {
        k: v for k, v in dic.items()
        if target in v
    } for target in value_to_search.split('|')
}

from pprint import pprint  # just for posting readability.

pprint(results)

输出:

Search: L1|B1
{'B1': {"Ah Chiang's Porridge": ['Eatery', 'B1', "Ah Chiang's Porridge"],
        'BlackBall': ['Dessert', 'B1', 'BlackBall']},
 'L1': {'4Fingers Crispy Chicken': ['Fast Food',
                                    'L1',
                                    '4Fingers Crispy Chicken'],
        'Aburi-EN': ['Restaurant', 'L1', 'Aburi-EN']}}

I wanted to be able to search for "Fast Food" & " L1" at the same time. And pull out the key&value that matches "Fast Food" & "L1"

我误解了。答案是这样的

value_to_search = input("Search: ")

results = {
    k: v for k, v in dic.items()
    if all(
        target.strip() in v
        for target in value_to_search.split('&')
    )
}

输出:

Search: Fast Food & L1
{'4Fingers Crispy Chicken': ['Fast Food', 'L1', '4Fingers Crispy Chicken']}

说明

  • {k: v for k, v in dic.items() if ...
    它使用满足条件的元素创建新字典
  • all(...)
    all是内置函数。您可以看到reference
    它接受一个iterable并返回True,只有iterable的所有元素都是True
  • target.strip()
    删除目标左侧和右侧的空格(不是字符串内部)
  • value_to_search.split('&')
    &value_to_search分隔的列表

请尝试以下代码:

dict = {
    "4Fingers Crispy Chicken":["Fast Food", "L1", "4Fingers Crispy Chicken"],
    "Aburi-EN":["Restaurant", "L1", "Aburi-EN"],
    "Ah Chiang's Porridge":["Eatery","B1","Ah Chiang's Porridge"],
    "BlackBall":["Dessert","B1", "BlackBall"],}
result={}

value_to_search = input("Search:")

for key, val in dict.items():
        if value_to_search in val:
                # if you want key value pair just for the element you are searching for
                result[key] = value_to_search
print(result)

输出:

Search:L1
{'4Fingers Crispy Chicken': 'L1', 'Aburi-EN': 'L1'}

相关问题 更多 >