首页 > 解决方案 > 为什么我的条件只消除字典中的第一个键/值对?

问题描述

我目前正在处理与字典有关的问题,您可以在其中编写一个函数,该函数删除值大于给定数字的所有键/值对。这是代码:

def remove_numbers_larger_than(number, dict1):
    for i, value in dict1.items():
        if value > number :
            del dict1[i]
            return dict1
        else:
            return dict1


dict1 = {'animals': 6 , 'truck': 3, 'country': 2}
number = 2

print(remove_numbers_larger_than(number, dict1))

通常我希望看到 output: {'country': 2},因为它是唯一小于给定数字的值,但我得到的是 output: {'truck': 3, 'country': 2}。它似乎正在采用初始条件并删除第一个值,但随后循环停止。

标签: dictionaryconditional-statementskey-value-coding

解决方案


只有第一项被删除,因为您在 for 循环的第一次迭代中立即从函数返回。要遍历每个值,您不应该在 for 循环结束之前返回。

但是,代码还有另一个问题。您正在遍历一个列表 ( dict1.items()),当您从字典中删除项目时,该列表将发生变化。一个简单的解决方法是复制您迭代的项目列表,允许原始列表更改而不会出现问题:

for i, value in list(dict1.items()):

推荐阅读