使用python函数在字典中按值获取键,并返回key或";无';
我试图只返回键值'20',但是我的函数返回'None'。我只希望它在输入字典中没有值时返回None使用python函数在字典中按值获取键,并返回key或";无';,python,loops,dictionary,Python,Loops,Dictionary,我试图只返回键值'20',但是我的函数返回'None'。我只希望它在输入字典中没有值时返回None def find_key(input_dict, value): for key,val in input_dict.items(): if val == value: return key else: return "None" find_key({100:'a', 20:'b', 3:'c', 400:'d'}, 'b')
def find_key(input_dict, value):
for key,val in input_dict.items():
if val == value:
return key
else:
return "None"
find_key({100:'a', 20:'b', 3:'c', 400:'d'}, 'b')
您可以将函数修改为
def find_键(输入指令,值):
对于键,输入项()中的val:
如果val==值:返回键
返回“无”
这意味着如果循环已经结束,函数只返回字符串
“None”
。在原始版本中,循环将在第一次迭代后退出,因为它命中了return
关键字。另外,如果您返回的是特殊的PythonNone
而不是字符串“None”
,您甚至不需要显式返回任何内容,因为None
是没有return
关键字的函数的默认返回值。您可以将函数修改为
def find_键(输入指令,值):
对于键,输入项()中的val:
如果val==值:返回键
返回“无”
这意味着如果循环已经结束,函数只返回字符串
“None”
。在原始版本中,循环将在第一次迭代后退出,因为它命中了return
关键字。此外,如果您返回的是特殊的PythonNone
而不是字符串“None”
,您甚至不需要显式返回任何内容,因为None
是没有return
关键字的函数的默认返回值。这将返回第一个匹配的键或无键:
def find_key(input_dict, value):
result = "None"
for key,val in input_dict.items():
if val == value:
result = key
return result
key = find_key({100:'a', 20:'b', 3:'c', 400:'d'}, 'b')
print(key) # 20
这将返回第一个匹配的键或无:
def find_key(input_dict, value):
result = "None"
for key,val in input_dict.items():
if val == value:
result = key
return result
key = find_key({100:'a', 20:'b', 3:'c', 400:'d'}, 'b')
print(key) # 20
因为你不知道你的字典有多个值,就像你要找的一样,你应该考虑返回一个键列表。
此外,返回<代码> 'NON' 可能是一个错误,您应该考虑返回<代码> NON/COM>(不是一个带有“没有”的字符串,而是实际的<代码> NON//COD>值,这在Python中更有用。
因此,我会使用:def find_keys(d, value):
result = [key for key, x in d.items() if x == value]
return result if result else None
或者,由于如果返回列表,则非常清楚[]
,只需:
def find_keys(d, value):
return [key for key, x in d.items() if x == value]
除了覆盖所有的情况,我最喜欢这个解决方案,因为如果你大声朗读代码,那么它的性能就很明显了,而且性能也很好。
< P>因为你不知道你的字典有多个值,就像你要找的一样,你应该考虑返回一个键列表。此外,返回<代码> 'NON' 可能是一个错误,您应该考虑返回<代码> NON/COM>(不是一个带有“没有”的字符串,而是实际的<代码> NON//COD>值,这在Python中更有用。
因此,我会使用:def find_keys(d, value):
result = [key for key, x in d.items() if x == value]
return result if result else None
或者,由于如果返回列表,则非常清楚[]
,只需:
def find_keys(d, value):
return [key for key, x in d.items() if x == value]
除了涵盖所有情况外,我最喜欢这个解决方案,因为如果您大声读出代码,它的功能和性能都非常明显。函数在for循环的第一次迭代后返回,因为
if
子句中有一个是真的。谢谢Jerie,我更改了代码。但是为什么它返回“None”而不是20?您编辑的代码也有同样的问题。请参考我下面的答案。如果有帮助,可以将return
视为break
,但功能更强大,因为它不仅打破了循环,而且还“打破”了功能。您不在字典中反转键/值的任何原因?然后就是returninput\u dict.get(key,None)
。函数在for循环的第一次迭代后返回,因为if
子句之一为true。谢谢Jerie,我更改了代码。但是为什么它返回“None”而不是20?您编辑的代码也有同样的问题。请参考我下面的答案。如果有帮助,可以将return
视为break
,但功能更强大,因为它不仅打破了循环,而且还“打破”了功能。您不在字典中反转键/值的任何原因?然后就是返回input\u dict.get(key,None)
。