Python>根据列表中的值从字典中查找键

时间:2021-07-21 12:40:21

标签: python

我正在使用像下面这样的字典,我想要一个函数,它最好根据用户提供的值返回键值。

test_dict={'Name':[abc,def],'Address':['Local','NonLocal']}

使用了以下函数:

def find_key_for(input_dict,value):
    result=[]
    for k,v in input_dict.items():
        if value in v:
           result.append(k)
        return result

当我使用上述功能时:

print(find_key_for(test-dict,'abc')) 它返回 [] 虽然我期待名字

或者,当我执行 (find_key_for(test-dict,'Local')) 时,它返回预期的 [Address]

为什么它对 Name 不起作用?我可以做哪些改变?

2 个答案:

答案 0 :(得分:2)

您需要取消缩进 return 语句:

def find_key_for(input_dict, value):
    result = []
    for k, v in input_dict.items():
        if value in v:
           result.append(k)
    return result

原因是因为如果你不这样做,并将它放在 for 循环中,你的函数将在只循环一次后返回。

最后,您可以在一行中使用嵌套列表推导式:

test_dict = {'Name': ['abc', 'def'], 'Address': ['Local', 'NonLocal']}

def find_key_for(input_dict, value):
    return [k for k in input_dict if value in input_dict[k]]

print(find_key_for(test_dict, 'abc'))

lambda 函数:

test_dict = {'Name': ['abc', 'def'], 'Address': ['Local', 'NonLocal']}

find_key_for = lambda input_dict, value: [k for k in input_dict if value in input_dict[k]]

print(find_key_for(test_dict, 'abc'))

输出:

['Name']

答案 1 :(得分:0)

首先,请确保正确格式化您的代码,使其更清晰。您可以通过点击屏幕顶部的代码 {} 来执行此操作。

此外,这段代码对我来说完全没问题。我注意到的一件事可能是一个问题(但也可能是您在这里输入错误)是在“名称”的列表中,您的“abc”和“def”没有括号,并且您可能会不小心分配它是一个对象而不是一个字符串。另外,您稍后将“test_dict”写为“test-dict”。