>>> import timeit
>>> timeit.timeit("d={'a':1}; d.pop('a')")
0.23399464370632472
>>> timeit.timeit("d={'a':1}; del d['a']")
0.15225347193388927
>>> timeit.timeit("d={'a':1}; d2 = {key: val for key, val in d.items() if key != 'a'}")
0.5365207354998063
较大的字典:
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d.pop(3)")
5.478138627299643
>>> timeit.timeit("d={nr: nr for nr in range(100)}; del d[3]")
5.362219126590048
>>> timeit.timeit("d={nr: nr for nr in range(100)}; d2 = {key: val for key, val in d.items() if key != 3}")
13.93129749387532
8 回答
我花了一些时间才弄明白
my_dict.pop("key", None)
到底在做什么 . 所以我将这个作为一个答案,以节省其他人的谷歌搜索时间:Documentation
如果你需要在一行代码中从字典中删除很多键,我认为使用map()非常简洁,Pythonic可读:
如果您需要在弹出不在字典中的值时捕获错误,请在map()中使用lambda,如下所示:
有用 . 即使myDict没有'e'键,'e'也不会导致错误 .
特别要回答“有这样一种方式吗?”
......好吧,你问;-)
但是,您应该考虑这种从
dict
删除对象的方式是not atomic -it可能'key'
在if
语句中可能在myDict
中,但在执行del
之前可能会被删除,在这种情况下del
将失败并且KeyError
. 鉴于此,无论是use dict.pop还是其他方面都是最安全的当然,这绝对不是一个单行 .
使用“del”关键字:
使用dict.pop():
如果字典中存在
key
,则返回my_dict[key]
,否则返回None
. 如果未指定第二个参数(即my_dict.pop('key')
)且key
不存在,则引发KeyError
.使用:
其他方式:
您可以按条件删除 . 如果
key
不存在则没有错误 .我们可以通过以下几种方法从Python字典中删除密钥 .
使用
del
关键字;这几乎和你做的一样 -Or
我们可以这样做:
但是应该记住,在这个过程中实际上它不会从字典中获得任何键,而不是从该字典中创建特定键 excluded . 另外,我发现它返回的字典与
myDict
的排序不同 .如果我们在shell中运行它,它将执行像
{'five': 500, 'four': 400, 'three': 300, 'two': 200}
这样的事情 - 注意它与myDict
的顺序不同 . 再次,如果我们尝试打印myDict
,那么我们可以看到所有键,包括我们通过这种方法从字典中排除的键 . 但是,我们可以通过将以下语句分配给变量来创建新字典:现在,如果我们尝试打印它,那么它将遵循父订单:
Or
使用
pop()
方法 .del
和pop
之间的区别在于,使用pop()
方法,如果需要,我们实际上可以存储 key's value ,如下所示:如果您觉得这很有用,请将叉子this gist用于将来参考 .
上述三种解决方案的时间安排 .
小字典:
较大的字典: