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中使用NLTK库实现对词干的提取的教程
Apr 08 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
Python将图片批量从png格式转换至WebP格式
Aug 22 Python
python2.7到3.x迁移指南
Feb 01 Python
Django shell调试models输出的SQL语句方法
Aug 29 Python
python中@property和property函数常见使用方法示例
Oct 21 Python
Python:合并两个numpy矩阵的实现
Dec 02 Python
Python递归及尾递归优化操作实例分析
Feb 01 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Python基于pyecharts实现关联图绘制
Mar 27 Python
Python中使用threading.Event协调线程的运行详解
May 02 Python
python修改微信和支付宝步数的示例代码
Oct 12 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
Yii实现多数据库主从读写分离的方法
2014/12/29 PHP
PHP parse_ini_file函数的应用与扩展操作示例
2019/01/07 PHP
PHP结合jquery ajax实现上传多张图片,并限制图片大小操作示例
2019/03/01 PHP
解读IE和firefox下JScript和HREF的执行顺序
2008/01/12 Javascript
jquery 简单的进度条实现代码
2010/03/11 Javascript
js Map List 遍历使用示例
2013/07/10 Javascript
JavaScript操作URL的相关内容集锦
2015/10/29 Javascript
jquery使用on绑定a标签无效 只能用live解决
2016/06/02 Javascript
JavaScript中style.left与offsetLeft的使用及区别详解
2016/06/08 Javascript
表单元素值获取方式js及java方式的简单实例
2016/10/15 Javascript
vue自定义指令实现v-tap插件
2016/11/03 Javascript
JS+jQuery实现注册信息的验证功能
2017/09/26 jQuery
jQuery实现的鼠标滚轮控制图片缩放功能实例
2017/10/14 jQuery
微信小程序学习笔记之登录API与获取用户信息操作图文详解
2019/03/29 Javascript
js 将线性数据转为树形的示例代码
2019/05/28 Javascript
Vue+element 解决浏览器自动填充记住的账号密码问题
2019/06/11 Javascript
js实现超级玛丽小游戏
2020/03/18 Javascript
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python入门之三角函数tan()函数实例详解
2017/11/08 Python
Python中fnmatch模块的使用详情
2018/11/30 Python
python利用ffmpeg进行录制屏幕的方法
2019/01/10 Python
详解django中url路由配置及渲染方式
2019/02/25 Python
什么是Smart Navigation?
2016/07/03 面试题
如何通过jdbc调用存储过程
2012/04/19 面试题
个人简历中的自我评价范例
2013/10/29 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
商铺门前三包责任书
2014/07/25 职场文书
群众路线教育实践活动学习心得体会
2014/10/30 职场文书
幼儿学前班评语
2014/12/29 职场文书
租赁协议书
2015/01/27 职场文书
2015年化妆品销售工作总结
2015/05/11 职场文书
男方家长婚礼答谢词
2015/09/29 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
Mysql Innodb存储引擎之索引与算法
2022/02/15 MySQL
恶魔之树最顶端的三颗果实 震震果实上榜,第一可以制造岩浆
2022/03/18 日漫
SQLyog的下载、安装、破解、配置教程(MySQL可视化工具安装)
2022/09/23 MySQL