前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python这10个字典操作你必须知道

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

作者头像
IT阅读排行榜
发布2019-05-14 11:58:37
4600
发布2019-05-14 11:58:37
举报
文章被收录于专栏:华章科技华章科技
导读:Python字典是另一种可变容器模型,且可存储任意类型对象,如字符串、数字、元组等其他容器模型。本文是关于字典的一些操作,嗯,干货必须收藏……

01 key是否存在

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

代码语言:javascript
复制
d = {"name": "zhang", "age":10}
key = "gender"
if key in d:
pass

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

02 合并字典

代码语言:javascript
复制
>>> 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 方法,将修改原来的对象,例如:

代码语言:javascript
复制
>>> y.update(x)
>>> y
{'b': 2, 'c': 4, 'a': 1}

03 迭代字典

代码语言:javascript
复制
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()会返回一个新的对象。

代码语言:javascript
复制
>>> for key in z:
   print(key, z[key])
b 2
c 4
a 1

04 字典推导

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

代码语言:javascript
复制
>>> 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排序。

代码语言:javascript
复制
>>> 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 默认值初始化字典

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

代码语言:javascript
复制
>>> 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 通过工厂函数提供初始化默认值

代码语言:javascript
复制
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函数来指定

代码语言:javascript
复制
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})
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大数据DT 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 02 合并字典
  • 03 迭代字典
  • 04 字典推导
  • 05 字典排序
  • 06 默认值初始化字典
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档