加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

python – 使用for循环从字典中删除项目

发布时间:2020-12-16 21:54:38 所属栏目:Python 来源:网络整理
导读:参见英文答案 deleting entries in a dictionary based on a condition????????????????????????????????????1个 如果密钥的值低于某个阈值,我正试图从字典中删除项目.举个简单的例子我的意思是: my_dict = {'blue': 1,'red': 2,'yellow': 3,'green': 4}for

参见英文答案 > deleting entries in a dictionary based on a condition????????????????????????????????????1个
如果密钥的值低于某个阈值,我正试图从字典中删除项目.举个简单的例子我的意思是:

my_dict = {'blue': 1,'red': 2,'yellow': 3,'green': 4}

for color in my_dict:
    threshold_value = 3
    if my_dict[color] < threshold_value:
        del my_dict[color]

print(my_dict)

现在,我得到一个RuntimeError:字典在迭代错误期间改变了大小.没有什么大惊喜.我发布这个问题的原因是:

>找出是否有一个优雅的解决方案,不需要创建一个新的字典(只包含值> gt; =阈值的键).
>尝试在此处了解Python的基本原理.我给自己读的方法是:“转到第一个键.该键的值是< x?if yes - del this key:value item并继续在字典中的下一个键,如果没有 - 继续没有做任何事情的下一把钥匙.换句话说,历史上发生在以前的键上的事情不应该影响我下一步的去向.无论过去如何,我都期待着接下来的项目.
我知道这很有趣(有些人可能会说愚蠢,我会给你这个)但是Python对这个循环的“思考方式”是什么?为什么不起作用? Python如何大声读出它?只是想更好地理解语言……

最佳答案
由于Python字典是作为哈希表实现的,因此您不应该依赖它们具有任何类型的顺序.密钥顺序可能无法预测地改变(但仅在插入或移除密钥之后).因此,无法预测下一个关键. Python会抛出RuntimeError以确保安全,并防止人们遇到意外结果.

Python 2的dict.items方法返回键值对的副本,因此您可以安全地迭代它并删除键不需要的值,如注释中建议的@wim.例:

for k,v in my_dict.items():
    if v < threshold_value:
        del my_dict[k]

但是,Python 3的dict.items返回view object,它反映了对字典所做的所有更改.这就是上面的解决方案仅适用于Python 2的原因.您可以将my_dict.items()转换为list(元组等)以使其与Python 3兼容.

解决问题的另一种方法是选择要删除的密钥,然后将其删除

keys = [k for k,v in my_dict.items() if v < threshold_value]
for x in keys:
    del my_dict[x]

这适用于Python 2和Python 3.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读