我正在使用像下面这样的字典,我想要一个函数,它最好根据用户提供的值返回键值。
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 不起作用?我可以做哪些改变?
答案 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”。