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基础教程之udp端口扫描
Feb 10 Python
深入理解python对json的操作总结
Jan 05 Python
Python删除Java源文件中全部注释的实现方法
Aug 30 Python
Python设计模式之工厂模式简单示例
Jan 09 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
Python 获取主机ip与hostname的方法
Dec 17 Python
python 字典访问的三种方法小结
Dec 05 Python
Python for循环通过序列索引迭代过程解析
Feb 07 Python
Python sql注入 过滤字符串的非法字符实例
Apr 03 Python
Python Selenium异常处理的实例分析
Feb 28 Python
pandas中关于apply+lambda的应用
Feb 28 Python
Python中time与datetime模块使用方法详解
Mar 31 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 n个不重复的随机数生成代码
2009/06/23 PHP
php数组函数序列之array_slice() - 在数组中根据条件取出一段值,并返回
2011/11/07 PHP
Php中文件下载功能实现超详细流程分析
2012/06/13 PHP
jQuery获取和设置表单元素的方法
2014/02/14 Javascript
火狐下input焦点无法重复获取问题的解决方法
2014/06/16 Javascript
函数式 JavaScript(一)简介
2014/07/07 Javascript
深入理解javascript严格模式(Strict Mode)
2014/11/28 Javascript
Javascript控制input输入时间格式的方法
2015/01/28 Javascript
理解 JavaScript Scoping &amp; Hoisting(二)
2015/11/18 Javascript
javascript之Array 数组对象详解
2016/06/07 Javascript
JavaScript实现输入框与清空按钮联动效果
2016/09/09 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
jquery滚动条插件(可以自定义)
2016/12/11 Javascript
Echarts基本用法_动力节点Java学院整理
2017/08/11 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
JS实现数组删除指定元素功能示例
2019/06/05 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
关于ckeditor在bootstrap中modal中弹框无法输入的解决方法
2019/09/11 Javascript
Python入门篇之字典
2014/10/17 Python
python最长回文串算法
2018/06/04 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
Python 实现自动导入缺失的库
2019/10/29 Python
django admin后管定制-显示字段的实例
2020/03/11 Python
PyQt5+Pycharm安装和配置图文教程详解
2020/03/24 Python
Django查询优化及ajax编码格式原理解析
2020/03/25 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
Python+Opencv身份证号码区域提取及识别实现
2020/08/25 Python
python反爬虫方法的优缺点分析
2020/11/25 Python
优秀学生干部推荐材料
2014/02/03 职场文书
2014年国庆节活动总结
2014/08/26 职场文书
部门群众路线教育实践活动对照检查材料思想汇报
2014/10/07 职场文书
党风廉正建设责任书
2015/01/29 职场文书
解析:创业计划书和商业计划书二者之间到底有什么区别
2019/08/14 职场文书
MySQL添加索引特点及优化问题
2022/07/23 MySQL
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers