加入收藏 | 设为首页 | 会员中心 | 我要投稿 北几岛 (https://www.beijidao.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

Python3 如何用最优雅的方式删除字典元素

发布时间:2021-05-21 04:56:02 所属栏目:大数据 来源: https://blog.csdn.net/yilovex
导读:Python 删除字典元素一般使用如下四种方式: clear() : 删除字典内所有元素。 pop() :删除字典给定键 key 所对应的值,返回值为被删除的值。 popitem() : 随机返回并删除字典中的一对键和值。 del : 能删单一的元素也能清空字典,清空只需一项操作。 但这种

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}

为什么呢?

这是因为 Python2map 函数返回的是 list 对象,而 Python3map 函数返回的是一个迭代器。迭代器是惰性序列,需要调用才能执行,所以我们的 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} 

使用匿名函数和三元表达式(条件短路)即可!

这样你执行无限次都没有问题啦!

(编辑:北几岛)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读