问题:编写一个名为 find_value 的函数,它接受两个参数。第一个参数,称为 search_dict,是一个字典。第二个参数 val_2_find 是要在字典中查找的特定值。如果值在字典中,它应该返回一个或多个相应键的列表(如果该值出现多次)。如果该值不在字典中,则应返回短语“该值不存在!”。
def find_value(search_dict, val_2_find):
lst = []
for k, y in search_dict.items():
if val_2_find in y:
lst.append(k)
else:
"That value does not exist!"
return lst
print(find_value({'key1': 'bird', 'key2': 'mineral', 'key3': 'animal', 'key4': 'animal', 'key5': 'animal'}, 'animal'))
问题:如何在不跳出 for 循环的情况下返回 Else?
答案 0 :(得分:0)
y 不是一个序列,并且假设您想要值“animal”的精确匹配。 if 语句应如下所示:
if val_2_find == y:
in 的问题在于,它是一个成员运算符,并且在您尝试查找“animal”时还会匹配诸如“animals”之类的额外内容。
并从 else 返回:只需添加如下。但请注意,函数执行就在那里停止。如果您希望 for 循环继续,您需要使用我在注释行中指定的 continue(取消注释)并删除 return。
else:
#continue
return "That value does not exist!"
所以完整的代码如下所示:
def find_value(search_dict, val_2_find):
lst = []
for k, y in search_dict.items():
if val_2_find == y:
lst.append(k)
else:
#continue
return "That value does not exist!"
return lst
print(find_value({'key1': 'bird', 'key2': 'mineral', 'key3': 'animal', 'key4': 'animal', 'key5': 'animal'}, 'animal'))
That value does not exist!
但是如果您的要求是仅在根本找不到元素时才返回字符串,那么代码应该如下所示:
def find_value(search_dict, val_2_find):
lst = []
for k, y in search_dict.items():
if val_2_find == y:
lst.append(k)
if not lst:
return "That value does not exist!"
return lst
>>> print(find_value({'key1': 'bird', 'key2': 'mineral', 'key3': 'animal', 'key4': 'animal', 'key5': 'animal'}, 'animals'))
That value does not exist!
>>>
>>> print(find_value({'key1': 'bird', 'key2': 'mineral', 'key3': 'animal', 'key4': 'animal', 'key5': 'animal'}, 'animal'))
['key3', 'key4', 'key5']
答案 1 :(得分:0)
您的代码存在一些问题。
for 循环中没有使用 else 语句。它不是在做你打算做的事情。你在那里不需要它。遍历完整字典后,请检查列表 lst[]
是否有任何值。如果是,则返回 lst
else 返回来自 else 语句的字符串。
第二个问题是使用 in
而不是 ==
。当您使用 in
时,'wild animals'
之类的值将被视为 animal
,因为 animal
是字符串 wild animals
的一部分。如果您只想具体说明 animal
,则必须使用 ==
。
这是更新后的代码:
def find_value(search_dict, val_2_find):
lst = []
for k, y in search_dict.items():
if val_2_find == y: #changed from 'in' to '=='
lst.append(k)
#removed the else statement
# changed the return statement to return lst or string based on value in lst
return lst if lst else "That value does not exist!"
您也可以进行列表理解。这将解决问题。您可以检查值 ==
(仅用于特定匹配)或 in
用于部分匹配。
这将检查与 animal
完全匹配的值作为任何给定键的值:
def find_value(search_dict, val_2_find):
lst = [k for k,v in search_dict.items() if val_2_find == v]
return lst if lst else "That value does not exist!"
print(find_value({'key1': 'bird', 'key2': 'mineral', 'key3': 'wild animals', 'key4': 'animal', 'key5': 'animals'}, 'animal'))
输出结果如下
['key4']
注意:key3
是 wild animals
,key5
是 animals
以下代码使用 in
并将检查值中 animal
的部分匹配。
def find_value(search_dict, val_2_find):
lst = [k for k,v in search_dict.items() if val_2_find in v]
return lst if lst else "That value does not exist!"
print(find_value({'key1': 'bird', 'key2': 'mineral', 'key3': 'wild animals', 'key4': 'animal', 'key5': 'animals'}, 'animal'))
animal
的输出是:
['key3', 'key4', 'key5']
human
的输出是:
That value does not exist!