ele*_*ent 13 python dictionary python-2.7 python-3.x
我想知道是否有一种简单的方法可以通过值从python字典中删除一个或多个字典元素.
我们有一个字典叫myDict
:
myDict = {1:"egg", "Answer":42, 8:14, "foo":42}
Run Code Online (Sandbox Code Playgroud)
并希望删除值等于的所有项目42
.
实施建议:
那么,您认为现在用Python实现这个问题的最优雅,最"pythonic"的方式是什么?
A.J*_*pal 25
您可以使用简单的dict
理解:
myDict = {key:val for key, val in myDict.items() if val != 42}
Run Code Online (Sandbox Code Playgroud)
因此:
>>> {key:val for key, val in myDict.items() if val != 42}
{8: 14, 1: 'egg'}
Run Code Online (Sandbox Code Playgroud)
您必须创建一个副本来迭代,因为更改循环内部字典的大小会导致RunTimeError.使用items()迭代字典副本中的键值对,并将每个值与您要查找的值进行比较.如果匹配,请从字典中删除密钥.
for key, value in dict(myDict).items():
if value == 42:
del mydict[key]
Run Code Online (Sandbox Code Playgroud)
在下面的评论中添加问题的答案,因为它对评论来说太大了.这是一个快速的控制台会话,显示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'}
`
Run Code Online (Sandbox Code Playgroud)