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的加密模块md5、sha、crypt使用实例
Sep 28 Python
深入理解Django的自定义过滤器
Oct 17 Python
python实现生命游戏的示例代码(Game of Life)
Jan 24 Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 Python
python实践项目之监控当前联网状态详情
May 23 Python
python绘制已知点的坐标的直线实例
Jul 04 Python
图文详解Django使用Pycharm连接MySQL数据库
Aug 09 Python
利用PyCharm操作Github(仓库新建、更新,代码回滚)
Dec 18 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
在PyCharm中遇到pip安装 失败问题及解决方案(pip失效时的解决方案)
Mar 10 Python
python mock测试的示例
Oct 19 Python
Python自然语言处理之切分算法详解
Apr 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
ASP中Sub和Function的区别说明
2020/08/30 Javascript
浅析js中2个等号与3个等号的区别
2013/08/06 Javascript
JS鼠标滑过图片时切换图片实现思路
2013/09/12 Javascript
JavaScript在IE和FF下的兼容性问题
2014/05/19 Javascript
使用jquery+CSS实现控制打印样式
2014/12/31 Javascript
JQuery中extend的用法实例分析
2015/02/08 Javascript
JS实现简单的图书馆享元模式实例
2015/06/30 Javascript
JavaScript基本的输出和嵌入式写法教程
2015/10/20 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
2016/09/05 Javascript
BootStrap中Table分页插件使用详解
2016/10/09 Javascript
基于KO+BootStrap+MVC实现的分页控件代码分享
2016/11/07 Javascript
Spring Boot+AngularJS+BootStrap实现进度条示例代码
2017/03/02 Javascript
Extjs表单输入框异步校验的插件实现方法
2017/03/20 Javascript
快速解决brew安装特定版本flow的问题
2018/05/17 Javascript
npm配置国内镜像资源+淘宝镜像的方法
2018/09/07 Javascript
原生JS forEach()和map()遍历的区别、兼容写法及jQuery $.each、$.map遍历操作
2019/02/27 jQuery
webpack安装配置与常见使用过程详解(结合vue)
2020/06/01 Javascript
python之wxPython菜单使用详解
2014/09/28 Python
Python实现TCP/IP协议下的端口转发及重定向示例
2016/06/14 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
2017/04/11 Python
Python并发编程协程(Coroutine)之Gevent详解
2017/12/27 Python
python实现用户管理系统
2018/01/10 Python
Python 数据处理库 pandas 入门教程基本操作
2018/04/19 Python
Python minidom模块用法示例【DOM写入和解析XML】
2019/03/25 Python
Python如何给函数库增加日志功能
2020/08/04 Python
python中如何打包用户自定义模块
2020/09/23 Python
MVMT手表官方网站:时尚又实惠的高品质手表
2016/12/04 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
管理学专业个人求职信范文
2013/12/13 职场文书
诚信考试承诺书
2014/03/27 职场文书
市场策划求职信
2014/08/07 职场文书
党的群众路线教育实践活动个人对照检查材料(企业)
2014/11/05 职场文书
2014年学校禁毒工作总结
2014/12/23 职场文书
2016年“5.12”国际护士节活动总结
2016/04/06 职场文书
健身房被搭讪?用python写了个小米计时器助人为乐
2021/06/08 Python