首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在python中按值删除字典项的最佳方法是什么?

在python中按值删除字典项的最佳方法是什么?
EN

Stack Overflow用户
提问于 2015-03-23 19:28:57
回答 5查看 83.5K关注 0票数 41

我想知道是否有简单的方法可以按值从python字典中删除一个或多个字典元素。

我们有一本叫myDict的字典

代码语言:javascript
运行
复制
myDict = {1:"egg", "Answer":42, 8:14, "foo":42}

并希望删除值等于42的所有项。

实施建议:

  1. myDict中获取具有特定值的所有键的列表 (例如,参见get key by value in dictionary。)
  2. myDict中删除此dict元素(基于已找到的键) (有关更多信息,请参见Delete an element from a dictionary。)

那么,您现在认为在Python中实现这个问题的最优雅的最“pythonic”的方法是什么?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2015-03-23 19:31:32

您可以使用简单的dict理解:

代码语言:javascript
运行
复制
myDict = {key:val for key, val in myDict.items() if val != 42}

因此:

代码语言:javascript
运行
复制
>>> {key:val for key, val in myDict.items() if val != 42}
{8: 14, 1: 'egg'}
票数 64
EN

Stack Overflow用户

发布于 2015-03-23 19:36:36

必须创建要迭代的副本,因为在循环中更改字典的大小会导致RunTimeError。使用items()在字典副本中对键、值对进行迭代,并将每个值与所寻找的值进行比较。如果匹配,则从字典中删除密钥。

代码语言:javascript
运行
复制
    for key, value in dict(myDict).items():
        if value == 42:
            del mydict[key]

在下面的评论中添加问题答案,因为它太大了,不能发表评论。下面是一个快速控制台会话,显示mydict.copy()dict(myDict)完成了相同的任务。

代码语言:javascript
运行
复制
>>>import copy
>>>dict1 = {1:"egg", "Answer":42, 8:14, "foo":42}
>>>dict2 = dict(dict1)
>>>dict3 = dict1.copy()
>>>dict4 = dict1
>>>dict1[1] = "egg sandwich"
>>>dict1
{'Answer': 42, 1: 'egg sandwich', 'foo': 42, 8: 14}
>>>dict2
{'Answer': 42, 1: 'egg', 'foo': 42, 8: 14}
>>>dict3
{'Answer': 42, 1: 'egg', 'foo': 42, 8: 14}
>>>dict4
{'Answer': 42, 1: 'egg sandwich', 'foo': 42, 8: 14}
>>>dict2['foo'] = "I pity the"
dict1
>>>{'Answer': 42, 1: 'egg sandwich', 'foo': 42, 8: 14}
>>>dict2
{'Answer': 42, 1: 'egg', 'foo': 'I pity the', 8: 14}
>>>dict3
{'Answer': 42, 1: 'egg', 'foo': 42, 8: 14}
>>>dict4
{'Answer': 42, 1: 'egg sandwich', 'foo': 42, 8: 14}
>>>dict4[8] = "new"
>>>dict1
{'Answer': 42, 1: 'egg sandwich', 'foo': 42, 8: 'new'}
>>>dict2
{'Answer': 42, 1: 'egg', 'foo': 'I pity the', 8: 14}
>>>dict3
{'Answer': 42, 1: 'egg', 'foo': 42, 8: 14}
>>>dict4
{'Answer': 42, 1: 'egg sandwich', 'foo': 42, 8: 'new'}
`
票数 11
EN

Stack Overflow用户

发布于 2015-03-23 20:21:15

我喜欢遵循“点击列表”的方法,在字典中进行迭代,然后将想要删除的条目添加到列表中,然后在迭代后删除列表中的条目,如下所示:

hitList =[]用于dictEntry:如果测试条件为hitList.append

对于hitList中的条目:删除命令条目

这只是一些伪码,但我过去在这方面很成功

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29218750

复制
相关文章

相似问题

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