使用python函数在字典中按值获取键,并返回key或";无';

使用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')

我试图只返回键值'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_键(输入指令,值):
对于键,输入项()中的val:
如果val==值:返回键
返回“无”

这意味着如果循环已经结束,函数只返回字符串
“None”
。在原始版本中,循环将在第一次迭代后退出,因为它命中了
return
关键字。另外,如果您返回的是特殊的Python
None
而不是字符串
“None”
,您甚至不需要显式返回任何内容,因为
None
是没有
return
关键字的函数的默认返回值。

您可以将函数修改为

def find_键(输入指令,值):
对于键,输入项()中的val:
如果val==值:返回键
返回“无”

这意味着如果循环已经结束,函数只返回字符串
“None”
。在原始版本中,循环将在第一次迭代后退出,因为它命中了
return
关键字。此外,如果您返回的是特殊的Python
None
而不是字符串
“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)