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计算一个序列的平均值的方法
Jul 11 Python
详谈Python2.6和Python3.0中对除法操作的异同
Apr 28 Python
pytorch中tensor的合并与截取方法
Jul 26 Python
python面试题之列表声明实例分析
Jul 08 Python
docker django无法访问redis容器的解决方法
Aug 21 Python
Python Django 页面上展示固定的页码数实现代码
Aug 21 Python
Python全栈之列表数据类型详解
Oct 01 Python
python多维数组分位数的求取方式
Mar 03 Python
Python操作MySQL数据库的示例代码
Jul 13 Python
python在一个范围内取随机数的简单实例
Aug 16 Python
Python xmltodict模块安装及代码实例
Oct 05 Python
python 下载文件的几种方式分享
Apr 07 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的图形函数中显示汉字
2006/10/09 PHP
PHP读取XML值的代码(推荐)
2011/01/01 PHP
新手学习PHP的一些基础知识分享
2011/07/27 PHP
基于php的微信公众平台开发入门实例
2015/04/15 PHP
PHP实现HTTP断点续传的方法
2015/06/17 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
PHP基于接口技术实现简单的多态应用完整实例
2017/04/26 PHP
htm调用JS代码
2007/03/15 Javascript
jquery获取radio值实例
2014/10/16 Javascript
jQuery实现tab选项卡效果的方法
2015/07/08 Javascript
常见JS验证脚本汇总
2015/12/01 Javascript
基于zepto.js简单实现上传图片
2016/06/21 Javascript
javascript将中国数字格式转换成欧式数字格式的简单实例
2016/08/02 Javascript
js select实现省市区联动选择
2020/04/17 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
js 将input框中的输入自动转化成半角大写(税号输入框)
2017/02/16 Javascript
Angular中使用MathJax遇到的一些问题
2017/12/15 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
vue中input的v-model清空操作
2019/09/06 Javascript
用javascript实现倒计时效果
2021/02/09 Javascript
python算法学习之计数排序实例
2013/12/18 Python
Python制作CSDN免积分下载器
2015/03/10 Python
合并百度影音的离线数据( with python 2.3)
2015/08/04 Python
详解Python开发中如何使用Hook技巧
2017/11/01 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
python 通过麦克风录音 生成wav文件的方法
2019/01/09 Python
一篇文章弄懂Python中所有数组数据类型
2019/06/23 Python
python操作cfg配置文件方式
2019/12/22 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
日本一家专门经营各种箱包的大型网站:Traveler Store
2016/08/03 全球购物
怎么写有吸引力的自荐信
2013/11/17 职场文书
村主任个人对照检查材料
2014/10/01 职场文书
护士2015年终工作总结
2015/04/29 职场文书
2015年司机年终工作总结
2015/05/14 职场文书
保护动物的宣传语
2015/07/13 职场文书
CSS实现切角+边框+投影+内容背景色渐变效果
2021/11/01 HTML / CSS