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实现的简单发送邮件脚本分享
Nov 07 Python
Python中实现三目运算的方法
Jun 21 Python
Python只用40行代码编写的计算器实例
May 10 Python
简单易懂的python环境安装教程
Jul 13 Python
Python OpenCV实现图片上输出中文
Jan 22 Python
python针对excel的操作技巧
Mar 13 Python
python-Web-flask-视图内容和模板知识点西宁街
Aug 23 Python
Python计算机视觉里的IOU计算实例
Jan 17 Python
有关Tensorflow梯度下降常用的优化方法分享
Feb 04 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
详解Open Folder as PyCharm Project怎么添加的方法
Dec 29 Python
python生成word合同的实例方法
Jan 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
全国FM电台频率大全 - 24 贵州省
2020/03/11 无线电
php Ubb代码编辑器函数代码
2012/07/05 PHP
PHP实现上传文件并存进数据库的方法
2015/07/16 PHP
jquery 可拖拽的窗体控件实现代码
2010/03/21 Javascript
Jquery 获得服务器控件值的方法小结
2010/05/11 Javascript
高效的获取当前元素是父元素的第几个子元素
2013/10/15 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
jq实现左侧显示图片右侧文字滑动切换效果
2015/08/04 Javascript
jQuery控制文本框只能输入数字和字母及使用方法
2016/05/26 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
解析微信JS-SDK配置授权,实现分享接口
2016/12/09 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
浅谈Vue.js中ref ($refs)用法举例总结
2017/12/19 Javascript
vue基础之使用get、post、jsonp实现交互功能示例
2019/03/12 Javascript
Linux下python3.7.0安装教程
2018/07/30 Python
Python实现计算文件MD5和SHA1的方法示例
2019/06/11 Python
使用Python实现跳一跳自动跳跃功能
2019/07/10 Python
Python3+Requests+Excel完整接口自动化测试框架的实现
2019/10/11 Python
python第三方库学习笔记
2020/02/07 Python
Python读取表格类型文件代码实例
2020/02/17 Python
使用Pyhton 分析酒店针孔摄像头
2020/03/04 Python
Tensorflow中的降维函数tf.reduce_*使用总结
2020/04/20 Python
CSS3中几个新增加的盒模型属性使用教程
2016/03/01 HTML / CSS
唤醒头发毛囊的秘密武器:Grow Gorgeous
2016/08/28 全球购物
一些Unix笔试题和面试题
2012/09/25 面试题
历史学专业推荐信
2013/11/06 职场文书
销售文员岗位职责
2013/11/29 职场文书
大学本科生的个人自我评价
2013/12/09 职场文书
迟到检讨书大全
2014/01/25 职场文书
医学生个人求职信范文
2014/02/07 职场文书
工程负责人任命书
2014/06/06 职场文书
2014年关工委工作总结
2014/11/17 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
学生个人总结范文
2015/02/15 职场文书
领导干部学习心得体会
2016/01/23 职场文书