专栏首页华章科技Python这10个字典操作你必须知道

Python这10个字典操作你必须知道

导读:Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。本文是关于字典的一些操作,嗯,干货必须收藏……

01 key是否存在

使用 in 关键字判断key是否存在字典中:

d = {"name": "zhang", "age":10}
key = "gender"
if key in d:
pass

不要使用 key in d.keys(), 这是一种画蛇添足的操作,因为d.keys()会返回一个新的列表对象,导致内存最大。

02 合并字典

>>> x = {'a': 1, 'b': 2}
>>> y = {'b': 3, 'c': 4}
>>> {**x, **y}
{'a': 1, 'b': 3, 'c': 4}

返回新的字典对象,x和y都不会改变,这是使用了PEP448范化解包操作, 如果 x 和 y 有相同的key, 那么y会覆盖x。如果使用字典的update 方法,将修改原来的对象,例如:

>>> y.update(x)
>>> y
{'b': 2, 'c': 4, 'a': 1}

03 迭代字典

z = {'b': 2, 'c': 4, 'a': 1}
>>> for key, value in z.items():
print(key, value)
b 2
c 4
a 1

也可以直接对字典z进行迭代,每次迭代返回的是key,前面那种操作 z.items()会返回一个新的对象。

>>> for key in z:
   print(key, z[key])
b 2
c 4
a 1

04 字典推导

使用字典推导式快速构建字典对象

>>> fruits = ['apple', 'mango', 'banana','cherry']
>>> {f:len(f) for f in fruits}
{'apple': 5, 'mango': 5, 'banana': 6, 'cherry': 6}

05 字典排序

字典本质上是个无序的容器对象(其实Python3.6开始支持有序,不过这个有序是指按照key的添加顺序),如果我们要对字典的 key 或者 value 排序,一般是将其转换为list,再按照key或者value排序。

>>> d = {"c": 3, "a": 1, "f":6, "b": 0}
# 按照value排序
>>> sorted(d.items(), key=operator.itemgetter(1))
[('b', 0), ('a', 1), ('c', 3), ('f', 6)]
# 按照key排序
>>> sorted(d.items(), key=operator.itemgetter(0))
[('a', 1), ('b', 0), ('c', 3), ('f', 6)]
>>>

06 默认值初始化字典

统计列表中每个字母出现的次数

>>> chars = ['a', 'b','c','a','d','c']
>>> data = {}
>>> for c in chars:
...     if c in data:
...         data[c]+=1
...     else:
...         data[c] = 0
...
>>> data
{'a': 1, 'b': 0, 'c': 1, 'd': 0}

可以使用 collections.defaultdict 通过工厂函数提供初始化默认值

chars = ['a', 'b','c','a','d','c']

dd = defaultdict(int)
for c in chars:
dd[c] += 1

>>>defaultdict(<class 'int'>, {'a': 2, 'b': 1, 'c': 2, 'd': 1})

defaultdict 是 dict 的子类,继承了 dict 的所有特性, 如果想要初始值为1 怎么办?可以用lambda函数来指定

dd = defaultdict(lambda: 1)
for c in chars:
dd[c] += 1

print(dd)
>>> defaultdict(<function <lambda> at 0x01226B28>, {'a': 3, 'b': 2, 'c': 3, 'd': 2})

本文分享自微信公众号 - 大数据(hzdashuju),作者:刘志军

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-05-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 如何对待数据,业务就如何对你 -- 打车软件反省

    这次重新把一篇一直在写,但一直没有写完和发表的博客捡起来的原因是起于知乎上面的一篇热评的文章《为什么移动打车 App 一直在烧钱,投资人还在不断投入?》虽然是几...

    华章科技
  • 谁在用 Python 弹奏一曲《菊花台》

    看到朋友圈有人在手机app上弹《菊花台》,简直太好听了。于是乎我也开始蠢蠢欲动,迅速下载app,对着谱子弹了起来。

    华章科技
  • 分析11年21部漫威电影,一览导演、主演、口碑票房最佳......

    导读:美漫迷,尤其是漫威迷这两天一定很激动吧!!《复仇者联盟4》定档4.24,比北美都还要提前两天上映,全球最早!

    华章科技
  • python基础—dict

    d = dict(((1,‘a’),(2,‘b’))) d {1: ‘a’, 2: ‘b’}

    dogfei
  • 彻底搞懂 etcd 系列文章(七):etcd gRPC 服务 API

    etcd 是云原生架构中重要的基础组件,由 CNCF 孵化托管。etcd 在微服务和 Kubernates 集群中不仅可以作为服务注册与发现,还可以作为 key...

    aoho求索
  • [Linux驱动炼成记] 08-GPIO按键

    arch/arm64/boot/dts/amlogic/xxx.dts gpio key dts 配置 :

    程序手艺人
  • ice中间件常见配置说明

    多线程意味着,来自客户的多个调用可以在服务器中并发执行。事实上,在同一个servant 中,以及在同一servant 的同一个操作中,都可以有多个请求在并行执...

    用户5166556
  • 用kotlin打印出漂亮的android日志(二)

    前面我已经写过一篇这个标题的文章,因为当时的代码还存在一些bug,并没有把这个项目放到github上我总觉得有一丝遗憾,这次修复了bug加了一些新功能还折腾了半...

    fengzhizi715
  • gRPC 使用 protobuf 构建微服务

    以前使用 Laravel 做 web 项目时,是根据 MVC 去划分目录结构的,即 Controller 层处理业务逻辑,Model 层处理数据库的 CURD,...

    aoho求索
  • 用Turtle库画一个爱心

    这个学期,我学了Python语言,并学到其中的一个库:turtle库。用turtle库可以画一些你想画的图片。

    py3study

扫码关注云+社区

领取腾讯云代金券