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中让MySQL查询结果返回字典类型的方法
Aug 22 Python
Python中使用PyQt把网页转换成PDF操作代码实例
Apr 23 Python
python中global用法实例分析
Apr 30 Python
opencv改变imshow窗口大小,窗口位置的方法
Apr 02 Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
Oct 24 Python
Python统计文本词汇出现次数的实例代码
Feb 27 Python
解决django接口无法通过ip进行访问的问题
Mar 27 Python
python 3.8.3 安装配置图文教程
May 21 Python
Python如何爬取qq音乐歌词到本地
Jun 01 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
上帝为你开了一扇窗之Tkinter常用函数详解
Jun 02 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
在Ubuntu 14.04上部署 PHP 环境及 WordPress
2014/09/02 PHP
详解WordPress中给链接添加查询字符串的方法
2015/12/18 PHP
laravel框架模型中非静态方法也能静态调用的原理分析
2019/11/23 PHP
JavaScript 权威指南(第四版) 读书笔记
2009/08/11 Javascript
js网页版计算器的简单实现
2013/07/02 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
javascript获取函数名称、函数参数、对象属性名称的代码实例
2014/04/12 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
原生JS实现不断变化的标签
2017/05/22 Javascript
JavaScript变量作用域_动力节点Java学院整理
2017/06/27 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
Vue使用vue-area-linkage实现地址三级联动效果的示例
2018/06/27 Javascript
小程序实现展开/收起的效果示例
2018/09/22 Javascript
利用hasOwnProperty给数组去重的面试题分享
2018/11/05 Javascript
mpvue微信小程序多列选择器用法之省份城市选择的实现
2019/03/07 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
js new Date()实例测试
2019/10/31 Javascript
原生js实现贪吃蛇游戏
2020/10/26 Javascript
vue-cli中实现响应式布局的方法
2021/03/02 Vue.js
python益智游戏计算汉诺塔问题示例
2014/03/05 Python
17个Python小技巧分享
2015/01/23 Python
python web.py开发httpserver解决跨域问题实例解析
2018/02/12 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
windows10下安装TensorFlow Object Detection API的步骤
2019/06/13 Python
python实现最速下降法
2020/03/24 Python
Python利用Pillow(PIL)库实现验证码图片的全过程
2020/10/04 Python
Python用Jira库来操作Jira
2020/12/28 Python
加拿大在线隐形眼镜和眼镜店:VisionPros
2019/10/06 全球购物
试用期员工考核制度
2014/01/22 职场文书
招聘与培训专员岗位职责
2014/01/30 职场文书
大龄毕业生求职别忘职业规划
2014/03/11 职场文书
2014年财政工作总结
2014/12/10 职场文书
怀孕辞职信怎么写
2015/02/28 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
Windows Server 版本 20H2 于 8 月 9 日停止支持,Win10 版本 21H1 将于 12 月结束支
2022/07/23 数码科技