dictionary - 为什么我的条件只消除字典中的第一个键/值对?
问题描述
我目前正在处理与字典有关的问题,您可以在其中编写一个函数,该函数删除值大于给定数字的所有键/值对。这是代码:
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}。它似乎正在采用初始条件并删除第一个值,但随后循环停止。
解决方案
只有第一项被删除,因为您在 for 循环的第一次迭代中立即从函数返回。要遍历每个值,您不应该在 for 循环结束之前返回。
但是,代码还有另一个问题。您正在遍历一个列表 ( dict1.items()
),当您从字典中删除项目时,该列表将发生变化。一个简单的解决方法是复制您迭代的项目列表,允许原始列表更改而不会出现问题:
for i, value in list(dict1.items()):
推荐阅读
- rest - 如何使用 Rest Assured 进行性能测试
- html - Webpack,我正在尝试使用文件加载器来加载图像,但是每当我运行构建时,我都会得到 2 个图像而不是 1 个,并且链接到 html 文件的那个是错误的
- python - 在GET请求调用flask上运行js文件/协程
- c# - 在默认浏览器 (C#) Windows10 的列表中显示自己的应用程序
- mysql - 将数据移动到新分区后,我们可以在ubantu中删除mysql的默认数据目录(&其中的数据)吗
- outlook - 如何使 OpenLDAP 与 MS Outlook wrt userSMIMECertificate 一起使用
- c# - 使用 Puppeteer-Sharp 设置输入值
- c# - 使用 Blazor WebAssembly 使用第三方 API
- office-js - OfficeJs - 使用流式调用时获取自定义函数的地址属性
- javascript - 如何将多个数组方法链接到箭头函数