首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么从字典中删除负值的代码不起作用?

为什么从字典中删除负值的代码不起作用?
EN

Stack Overflow用户
提问于 2013-12-06 07:57:09
回答 5查看 4.6K关注 0票数 6

我必须去掉所有有负值的条目。为什么我的代码不起作用?

代码语言:javascript
代码运行次数:0
运行
复制
dic = {'aa': 20, 'bb': -10, 'cc': -12}

for i in dic:
    if dic[i] < 0:
        del dic[i]
        
print(dic)

在运行这段代码时,我会得到一个异常:

RuntimeError:字典在迭代过程中更改大小

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-12-06 10:07:06

您可以通过使用dict理解来完成这一任务。

代码语言:javascript
代码运行次数:0
运行
复制
dic = {k: v for (k, v) in dic.items() if v >= 0}
票数 6
EN

Stack Overflow用户

发布于 2013-12-06 08:02:21

这应该适用于Python2.x-用以下方式替换for循环

代码语言:javascript
代码运行次数:0
运行
复制
 for i in dic.keys():
   if dic[i]<0:
    del dic[i]

这在Python3.x中不起作用的原因是keys返回一个迭代器而不是列表--我在https://stackoverflow.com/a/11941855/2314737中找到了一个解释

很微妙的区别--我不知道。

因此,在Python3.x中,您需要使用

代码语言:javascript
代码运行次数:0
运行
复制
for i in list(dic):
票数 4
EN

Stack Overflow用户

发布于 2013-12-06 08:17:53

代码语言:javascript
代码运行次数:0
运行
复制
delete_list = []
for i in dic:
    if dic[i] < 0:
        delete_list.append(i)
for each in delete_list:
    del dic[each]
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20418851

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档