前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python中字典dict的操作技巧汇总

python中字典dict的操作技巧汇总

作者头像
生信修炼手册
发布2020-05-07 16:31:55
1.3K0
发布2020-05-07 16:31:55
举报
文章被收录于专栏:生信修炼手册生信修炼手册

字典是使用最为广泛的数据结构了,从结构来看,其内容就是键值对,键称为key, 值称为value, 类似词典中通过前面的索引来快速查找后面的页面,通过key可以快速定位对应的值。字典,是python中对这种结构的命名,在其他语言中有其他的名字,比如perl中称之为哈希。

字典通过大括号或者dict函数来创建,用法如下

代码语言:javascript
复制
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a
{'one': 1, 'tow': 2, 'three': 3}
>>> type(a)
<class 'dict'>

key和value之间用冒号分隔,多个键值对用逗号分隔。上述字典用dict函数创建的代码如下

代码语言:javascript
复制
>>> a = dict((('one',1), ('tow',2), ('three',3)))
>>> a
{'one': 1, 'tow': 2, 'three': 3}
>>>
>>> a = dict(zip(['one', 'tow', 'three'], [1, 2, 3]))
>>> a
{'one': 1, 'tow': 2, 'three': 3}
>>>
>>>
>>> a = dict({'one':1, 'tow':2, 'three':3})
>>> a
{'one': 1, 'tow': 2, 'three': 3}

可以看到,dict函数更加灵活,支持多种写法。字典中的key是无序且唯一的,不存在数字下标索引,要访问其中的值,只能通过key来访问,用法如下

代码语言:javascript
复制
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a['one']
1

关于字典,内置了很多方法和函数,常用的几种如下

1. 访问字典元素
代码语言:javascript
复制
# 方括号加下标
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a['one']
1
# get方法
>>> a.get('one')
1
2. 修改字典元素
代码语言:javascript
复制
# 可以重新赋值,也可以新增值
>>> a = {'one':1, 'tow':2, 'three':3}
>>> a['one'] = 2
>>> a
{'one': 2, 'tow': 2, 'three': 3}
# del 删除元素
>>> del a['one']
# pop删除元素
>>> a.pop("tow")
# 清空字典
>>> a.clear()
3. 遍历字典

当我们遍历字典的时候,本质是在遍历字典的key和value, 通过以下函数可以方便的获得字典的key或者value

代码语言:javascript
复制
# 返回所有key的列表
>>> a.keys()
dict_keys(['one', 'tow', 'three'])
# 返回所有values的列表
>>> a.values()
dict_values([1, 2, 3])
# 返回(key, value)构成的元组序列
>>> a.items()
dict_items([('one', 1), ('tow', 2), ('three', 3)])
# 返回所有key的列表
>>> list(a)
['one', 'tow', 'three']
# 返回所有key构成的迭代器
>>> iter(a)
<dict_keyiterator object at 0x035A9D20>
>>> for i in iter(a):
...     print(i)
...
one
tow
three

在perl中,哈希的key都是字符串,而在python中,字典的key非常灵活,只要是不可变的对象都可以,比如数字,字符串,元组。利用元组,可以模拟多维字典,用法如下

代码语言:javascript
复制
>>> a = {(1, 2):'one', (3, 4):'tow'}
>>> a[(1,2)]
'one'

上面就是字典的基本用法,掌握了基础,我们来看两个在实际中经常使用的进阶版字典

1. 值为列表的字典

python中不仅key很灵活,其value也很灵活。比如我们想要创建一个value为列表的字典,也是可以的

代码语言:javascript
复制
>>> a = {'one' : [1, 2, 3, 4, 5], 'tow':[1, 2, 3, 4, 5]}
>>> a
{'one': [1, 2, 3, 4, 5], 'tow': [1, 2, 3, 4, 5]}
>>> a['one']
[1, 2, 3, 4, 5]

直接写,当然没什么难度,但是在实际工作中,经典的使用场景是循环给字典赋值,如果要实现值为列表,必须先将值设为一个空的列表,用法如下

代码语言:javascript
复制
>>> num = [1, 2, 3, 4, 5]
>>> a = {}
# 直接添加,报错
>>> for i in num:
...     a['one'].append(i)
...
Traceback (most recent call last):
  File "<stdin>", line 2, in <module>
KeyError: 'one'
# 先设定为空列表,在追加
# 结果ok
>>> a['one'] = []
>>> for i in num:
...     a['one'].append(i)
...
>>>
>>> a
{'one': [1, 2, 3, 4, 5]}

可以看出,关键的问题是value的默认值,由于默认值不是列表,所以直接用append方法会报错。为了解决问题,只需要将默认值设为列表就可以了。python有一个内置模块collections, 提供了defaultdict函数,可以方便的设置默认值,用法如下

代码语言:javascript
复制
>>> from  collections import defaultdict
>>> # 这里的list表明key的默认value为list
>>> a = defaultdict(list)
>>> for i in num:
...     a['one'].append(i)
...
>>>
>>> a
defaultdict(<class 'list'>, {'one': [1, 2, 3, 4, 5]})

用这种写法更加优雅。

2. 嵌套的字典

所谓嵌套,就是有多级key, 类似

a[key1][key2] = value

通过设置value的默认值为dict, 可以方便的实现嵌套字典,用法如下

代码语言:javascript
复制
>>> a = defaultdict(dict)
>>> a['one']['tow'] = 1
>>> a['one']['three'] = 2
>>> a
defaultdict(<class 'dict'>, {'one': {'tow': 1, 'three': 2}})

上述写法只支持两个key的嵌套 在实际工作中已经可以满足需求了,两层以上的嵌套几乎用不到。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 访问字典元素
  • 2. 修改字典元素
  • 3. 遍历字典
  • 1. 值为列表的字典
  • 2. 嵌套的字典
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档