Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法


Posted in Python onFebruary 18, 2018

本文实例讲述了Python在字典中将键映射到多个值上的方法。分享给大家供大家参考,具体如下:

问题:一个能将键(key)映射到多个值的字典(即所谓的一键多值字典[multidict])

解决方案:如果想让键映射到多值,需要将这多个值保持到另一个容器如列表或集合中;

>>> d={'a':[1,2,3],'b':[4,5]}
>>> d
{'b': [4, 5], 'a': [1, 2, 3]}
>>> e={'a':{1,2,3,3},'b':{4,5}}
>>> e
{'b': {4, 5}, 'a': {1, 2, 3}}
>>> f={'a':[1,2,3,3],'b':[4,5]}
>>> f
{'b': [4, 5], 'a': [1, 2, 3, 3]}
>>>

更方便的创建这样的字典是利用collections模块中的defaultdict类。defaultdict的一个特点是它会自动给字典初始化第一个值,这样只需添加元素即可。例如:

from collections import defaultdict
d=defaultdict(list) #创建一键多值的字典,key的value是list类型
d['a'].append(1)
d['a'].append(2)
d['a'].append(2)
d['b'].append(4)
c=defaultdict(set) #创建一键多值的字典,key的value是set类型
c['a'].add(1)
c['a'].add(2)
c['a'].add(2)
c['b'].add(4)
print('key的value是list类型的字典:',d)
print('key的value是set类型的字典:',c)
>>> ================================ RESTART ================================
>>>
key的value是list类型的字典: defaultdict(<class 'list'>, {'b': [4], 'a': [1, 2, 2]})
key的value是set类型的字典: defaultdict(<class 'set'>, {'b': {4}, 'a': {1, 2}})
>>>

关于defaultdict需要注意的一点,他会自动创建字典表项以待稍后的访问(即使这些表项当前在字典中还没有找到)。

如果想取消这个功能,可以在普通的字典上调用setdefault()方法来取代,例如:

d={} #一个普通的字典
d.setdefault('a',[]).append(1)
d.setdefault('a',[]).append(2)
d.setdefault('a',[]).append(2)
d.setdefault('b',[]).append(4)
>>>

key的value是list类型的字典:

{'a': [1, 2, 2], 'b': [4]}

补充:

构建一个一键多值的字典很容易,但是如果试着自己对第一个值做初始化操作,这个会变得很杂乱,如果使用defaultdic后代码会简洁很多:

pairs={'a':[22,44],'b':[88]}
d=defaultdict(list)
for key,value in pairs.items():
  d[key].append(value)
print (d)
>>>
defaultdict(<class 'list'>, {'a': [[22, 44]], 'b': [[88]]})
>>>

(代码摘自《Python Cookbook》)

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python描述器descriptor详解
Feb 03 Python
Python解惑之True和False详解
Apr 24 Python
python select.select模块通信全过程解析
Sep 20 Python
Python探索之爬取电商售卖信息代码示例
Oct 27 Python
python中文分词教程之前向最大正向匹配算法详解
Nov 02 Python
Python读写docx文件的方法
May 08 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
Python3视频转字符动画的实例代码
Aug 29 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
使用 Python 读取电子表格中的数据实例详解
Apr 17 Python
python机器学习Github已达8.9Kstars模型解释器LIME
Nov 23 Python
Python cookbook(数据结构与算法)实现优先级队列的方法示例
Feb 18 #Python
python快速建立超简单的web服务器的实现方法
Feb 17 #Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 #Python
python3学习笔记之多进程分布式小例子
Feb 13 #Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
Feb 13 #Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 #Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 #Python
You might like
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php设计模式 Decorator(装饰模式)
2011/06/26 PHP
PHP 通过Socket收发十六进制数据的实现代码
2013/08/16 PHP
PHP统计二维数组元素个数的方法
2013/11/12 PHP
php中常量DIRECTORY_SEPARATOR用法深入分析
2014/11/14 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
thinkphp5实现微信扫码支付
2019/12/23 PHP
用正则获取指定路径文件的名称
2007/02/27 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
Jquery Ajax学习实例5 向WebService发出请求,返回泛型集合数据的异步调用
2010/03/17 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
改变隐藏的input中value值的方法
2014/03/19 Javascript
nodejs中的fiber(纤程)库详解
2015/03/24 NodeJs
JS模拟简易滚动条效果代码(附demo源码)
2016/04/05 Javascript
JS敏感词过滤代码
2016/12/23 Javascript
vue+web端仿微信网页版聊天室功能
2019/04/30 Javascript
JavaScript Math对象和调试程序的方法分析
2019/05/13 Javascript
解决Vue中 父子传值 数据丢失问题
2019/08/27 Javascript
Vue+Koa2+mongoose写一个像素绘板的实现方法
2019/09/10 Javascript
Vue数据双向绑定底层实现原理
2019/11/22 Javascript
TypeScript魔法堂之枚举的超实用手册
2020/10/29 Javascript
javascript实现简单留言板案例
2021/02/09 Javascript
[00:55]深扒TI7聊天轮盘语音出处3
2017/05/11 DOTA
python快速排序代码实例
2013/11/21 Python
Python入门_条件控制(详解)
2017/05/16 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
python Django 创建应用过程图示详解
2019/07/29 Python
python+selenium 脚本实现每天自动登记的思路详解
2020/03/11 Python
临床医学专业毕业生的自我评价
2013/10/17 职场文书
运动会广播稿400字
2014/01/25 职场文书
高中生的自我评价
2014/03/04 职场文书
灰雀教学反思
2014/04/28 职场文书
12.4法制宣传日标语
2014/10/08 职场文书
经理岗位职责
2015/02/02 职场文书
高中信息技术教学反思
2016/02/16 职场文书