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 相关文章推荐
安装dbus-python的简要教程
May 05 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
学习Python3 Dlib19.7进行人脸面部识别
Jan 24 Python
python搭建服务器实现两个Android客户端间收发消息
Apr 12 Python
pycharm创建一个python包方法图解
Apr 10 Python
python爬虫 爬取58同城上所有城市的租房信息详解
Jul 30 Python
python selenium登录豆瓣网过程解析
Aug 10 Python
OpenCV python sklearn随机超参数搜索的实现
Jan 17 Python
python实现人机猜拳小游戏
Feb 03 Python
Pandas对DataFrame单列/多列进行运算(map, apply, transform, agg)
Jun 14 Python
python中的垃圾回收(GC)机制
Sep 21 Python
从Pytorch模型pth文件中读取参数成numpy矩阵的操作
Mar 04 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
PL-880隐藏功能
2021/03/01 无线电
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
2017/08/31 PHP
window.open被浏览器拦截后的自定义提示效果代码
2007/11/19 Javascript
jquery easyui的tabs使用时的问题
2010/03/23 Javascript
图片轮换效果实现代码(点击按钮停止执行)
2013/04/12 Javascript
JS显示表格内指定行html代码的方法
2015/03/31 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
jQuery选择器_动力节点Java学院整理
2017/07/05 jQuery
jquery+css实现下拉列表功能
2017/09/03 jQuery
Vue2 模板template的四种写法总结
2018/02/23 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
详解从NodeJS搭建中间层再谈前后端分离
2018/11/13 NodeJs
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
基于JS实现简单滑块拼图游戏
2019/10/12 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
如何通过vscode运行调试javascript代码
2020/07/24 Javascript
JavaScript实现滑块验证解锁
2021/01/07 Javascript
[01:43]3.19DOTA2发布会 三代刀塔人第三代
2014/03/25 DOTA
[50:54]完美世界DOTA2联赛 GXR vs IO 第三场 11.07
2020/11/10 DOTA
python使用mysql数据库示例代码
2017/05/21 Python
基于numpy中数组元素的切片复制方法
2018/11/15 Python
Python使用pandas和xlsxwriter读写xlsx文件的方法示例
2019/04/09 Python
Python模拟登录之滑块验证码的破解(实例代码)
2019/11/18 Python
Django restframework 框架认证、权限、限流用法示例
2019/12/21 Python
IE兼容css3圆角的实现代码
2011/07/21 HTML / CSS
美国时尚配饰品牌:Dooney & Bourke
2017/11/14 全球购物
澳大利亚小众服装品牌:Maurie & Eve
2018/03/27 全球购物
一些关于MySql加速和优化的面试题
2014/01/30 面试题
乔迁之喜主持词
2014/03/27 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
关于长城的导游词
2015/01/30 职场文书
商务考察邀请函模板
2015/02/02 职场文书
优秀党员主要事迹范文
2015/11/05 职场文书
2016年班主任培训心得体会
2016/01/07 职场文书
解决golang结构体tag编译错误的问题
2021/05/02 Golang