我想知道是否有简单的方法可以按值从python字典中删除一个或多个字典元素。
我们有一本叫myDict
的字典
myDict = {1:"egg", "Answer":42, 8:14, "foo":42}
并希望删除值等于42
的所有项。
实施建议:
myDict
中获取具有特定值的所有键的列表
(例如,参见get key by value in dictionary。)myDict
中删除此dict元素(基于已找到的键)
(有关更多信息,请参见Delete an element from a dictionary。)那么,您现在认为在Python中实现这个问题的最优雅的和最“pythonic”的方法是什么?
发布于 2015-03-23 19:31:32
您可以使用简单的dict
理解:
myDict = {key:val for key, val in myDict.items() if val != 42}
因此:
>>> {key:val for key, val in myDict.items() if val != 42}
{8: 14, 1: 'egg'}
发布于 2015-03-23 19:36:36
必须创建要迭代的副本,因为在循环中更改字典的大小会导致RunTimeError。使用items()在字典副本中对键、值对进行迭代,并将每个值与所寻找的值进行比较。如果匹配,则从字典中删除密钥。
for key, value in dict(myDict).items():
if value == 42:
del mydict[key]
在下面的评论中添加问题答案,因为它太大了,不能发表评论。下面是一个快速控制台会话,显示mydict.copy()
和dict(myDict)
完成了相同的任务。
>>>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'}
`
发布于 2015-03-23 20:21:15
我喜欢遵循“点击列表”的方法,在字典中进行迭代,然后将想要删除的条目添加到列表中,然后在迭代后删除列表中的条目,如下所示:
hitList =[]用于dictEntry:如果测试条件为hitList.append
对于hitList中的条目:删除命令条目
这只是一些伪码,但我过去在这方面很成功
https://stackoverflow.com/questions/29218750
复制相似问题