为什么我的条件只消除字典中的第一个键/值对?



我目前正在研究一个与字典有关的问题,您编写一个函数来删除值大于给定数字的所有键/值对。这是代码:

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))

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

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

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

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

最新更新