Python 删除字典元素一般使用如下四种方式:
-
clear() : 删除字典内所有元素。
-
pop() :删除字典给定键 key 所对应的值,返回值为被删除的值。
-
popitem() : 随机返回并删除字典中的一对键和值。
-
del : 能删单一的元素也能清空字典,清空只需一项操作。
但这种方式并不优雅,这里就介绍一种非常优美的方式:
Python 2.7
>>> data = {'a': 1,'b': 2,'c': 3,'d': 4}
>>> map(data.pop,['a','c'])
[1,3]
>>> data
{'b': 2,'d': 4}
但是我在 Python3 中却并没有删除掉。
>>> data = {'a': 1,'c'])
<map object at 0x7faabf344580>
>>> data
{'a': 1,'d': 4}
为什么呢?
这是因为 Python2 的 map 函数返回的是 list 对象,而 Python3 的 map 函数返回的是一个迭代器。迭代器是惰性序列,需要调用才能执行,所以我们的 dict 元素 没有被 pop 掉,为了实现删除我们需要执行一次。
>>> data = {'a': 1,'d': 4}
>>> [value for value in map(data.pop,'c'])]
[1,'d': 4}
这样,就可以了!
但是!你以为就这样结束了吗?!!
。。。正片开始。。。
上述讲的方法存在这一个问题,就是如果字典里没有元素会怎么样?那就只能报错了。
如果我们在执行一次刚刚的代码:
>>> [value for value in map(data.pop,'c'])]
Traceback (most recent call last):
File "<stdin>",line 1,in <module>
File "<stdin>",in <listcomp>
KeyError: 'a'
那有没有避免报错的方式呢?
想什么呢?
当然有啦!
>>> [value for value in map(lambda index: data.pop(index) if data.get(index) else None,'c'])]
[None,None]
>>> data
{'b': 2,'d': 4}
使用匿名函数和三元表达式(条件短路)即可!
这样你执行无限次都没有问题啦! (编辑:北几岛)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|