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中用startswith()函数判断字符串开头的教程
Apr 07 Python
Python优化技巧之利用ctypes提高执行速度
Sep 11 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
python定向爬取淘宝商品价格
Feb 27 Python
Django添加feeds功能的示例
Aug 07 Python
python 字符串常用函数详解
Sep 11 Python
浅析python,PyCharm,Anaconda三者之间的关系
Nov 27 Python
Python面向对象程序设计之静态方法、类方法、属性方法原理与用法分析
Mar 23 Python
Python基于字典实现switch case函数调用
Jul 22 Python
scrapy redis配置文件setting参数详解
Nov 18 Python
Python实现微信表情包炸群功能
Jan 28 Python
Django操作cookie的实现
May 26 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
PHP中mb_convert_encoding与iconv函数的深入解析
2013/06/21 PHP
十大使用PHP框架的理由
2015/09/26 PHP
php数组函数array_key_exists()小结
2015/12/10 PHP
PHP弱类型的安全问题详细总结
2016/09/25 PHP
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
javascript 面向对象编程基础 多态
2009/08/21 Javascript
网页图片延时加载的js代码
2010/04/22 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
2012/10/11 Javascript
css transform 3D幻灯片特效实现步骤解读
2013/03/27 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
使用phantomjs进行网页抓取的实现代码
2014/09/29 Javascript
JavaScript实现彩虹文字效果的方法
2015/04/16 Javascript
coffeescript使用的方式汇总
2015/08/05 Javascript
jquery实现超简洁的TAB选项卡效果代码
2015/08/28 Javascript
设计模式中的组合模式在JavaScript程序构建中的使用
2016/05/18 Javascript
AngularJS 中的事件详解
2016/07/28 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
js轮播图的插件化封装详解
2017/07/17 Javascript
jQuery滚动条美化插件nicescroll简单用法示例
2018/04/18 jQuery
JS实现点击按钮可实现编辑功能
2018/07/03 Javascript
JS实现获取自定义属性data值的方法示例
2018/12/19 Javascript
微信小程序的注册页面包含倒计时验证码、获取用户信息
2019/05/22 Javascript
jQuery实现图片下载代码
2019/07/18 jQuery
vue下的@change事件的实现
2019/10/25 Javascript
剖析Python的Tornado框架中session支持的实现代码
2015/08/21 Python
python3大文件解压和基本操作
2017/12/15 Python
Python实现的各种常见分布算法示例
2018/12/13 Python
Python爬虫beautifulsoup4常用的解析方法总结
2019/02/25 Python
python实现名片管理器的示例代码
2019/12/17 Python
python给图像加上mask,并提取mask区域实例
2020/01/19 Python
Pytorch十九种损失函数的使用详解
2020/04/29 Python
如何用Python来进行查询和替换一个文本字符串
2014/01/02 面试题
集团公司人力资源部岗位职责
2014/01/03 职场文书
乡镇个人对照检查材料
2014/08/22 职场文书
争先创优个人总结
2015/03/04 职场文书