遍历字典

时间:2021-01-05 02:49:10

标签: python python-3.x

<块引用>

问题:编写一个名为 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?

2 个答案:

答案 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']

注意:key3wild animalskey5animals

以下代码使用 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!