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、redis操作方法
Jun 28 Python
python字符串与url编码的转换实例
May 10 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
Jul 12 Python
Python操作json的方法实例分析
Dec 06 Python
python中hasattr()、getattr()、setattr()函数的使用
Aug 16 Python
Python坐标线性插值应用实现
Nov 13 Python
Python 模拟生成动态产生验证码图片的方法
Feb 01 Python
Python 实现自动完成A4标签排版打印功能
Apr 09 Python
python 在threading中如何处理主进程和子线程的关系
Apr 25 Python
Python 列表中的修改、添加和删除元素的实现
Jun 11 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 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
关于PHP自动判断字符集并转码的详解
2013/06/26 PHP
Thinkphp实现自动验证和自动完成
2015/12/19 PHP
thinkphp3.2嵌入百度编辑器ueditor的实例代码
2017/07/13 PHP
Laravel学习教程之View模块详解
2017/09/18 PHP
PHP 访问数据库配置通用方法(json)
2018/05/20 PHP
Laravel关系模型指定条件查询方法
2019/10/10 PHP
PHP pthreads v3下的Volatile简介与使用方法示例
2020/02/21 PHP
学习ExtJS Panel常用方法
2009/10/07 Javascript
解决自定义$(id)的方法与jquery选择器$冲突的问题
2014/06/14 Javascript
JQuery右键菜单插件ContextMenu使用指南
2014/12/19 Javascript
JQuery实现动态适时改变字体颜色的方法
2015/03/10 Javascript
关于json字符串与实体之间的严格验证代码
2016/11/10 Javascript
jquery实现瀑布流效果 jquery下拉加载新数据
2016/12/12 Javascript
vue.js源代码core scedule.js学习笔记
2017/07/03 Javascript
jQuery使用动画队列自定义动画操作示例
2018/06/16 jQuery
vue生成文件本地打开查看效果的实例
2018/09/06 Javascript
Layui之table中的radio在切换分页时无法记住选中状态的解决方法
2019/09/02 Javascript
微信小程序纯文本实现@功能
2020/04/08 Javascript
python中的lambda表达式用法详解
2016/06/22 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
Numpy对数组的操作:创建、变形(升降维等)、计算、取值、复制、分割、合并
2019/08/28 Python
django框架使用views.py的函数对表进行增删改查内容操作详解【models.py中表的创建、views.py中函数的使用,基于对象的跨表查询】
2019/12/12 Python
在notepad++中实现直接运行python代码
2019/12/18 Python
python数据库编程 ODBC方式实现通讯录
2020/03/27 Python
Python 字符串池化的前提
2020/07/03 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
如何利用CSS3制作3D效果文字具体实现样式
2013/05/02 HTML / CSS
Oroton中国官网:澳洲知名奢侈配饰品牌
2017/03/26 全球购物
Feelunique中文官网:欧洲最大化妆品零售电商
2020/07/10 全球购物
《狐假虎威》教学反思
2014/02/07 职场文书
党的群众路线教育实践活动宣传方案
2014/02/23 职场文书
好书伴我成长演讲稿
2014/05/14 职场文书
护理专业求职信
2014/06/15 职场文书
食品安全演讲稿
2014/09/01 职场文书
终止或解除劳动合同及劳动关系的证明书
2014/10/06 职场文书
golang中的struct操作
2021/11/11 Golang