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进阶教程之文本文件的读取和写入
Aug 29 Python
Python新手入门最容易犯的错误总结
Apr 24 Python
Python基础语言学习笔记总结(精华)
Nov 14 Python
详解python上传文件和字符到PHP服务器
Nov 24 Python
python format 格式化输出方法
Jul 16 Python
Python opencv实现人眼/人脸识别以及实时打码处理
Apr 29 Python
python 读取修改pcap包的例子
Jul 23 Python
Python用input输入列表的实例代码
Feb 07 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
python去除删除数据中\u0000\u0001等unicode字符串的代码
Mar 06 Python
基于python图书馆管理系统设计实例详解
Aug 05 Python
15个应该掌握的Jupyter Notebook使用技巧(小结)
Sep 23 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构造函数实例讲解
2013/11/13 PHP
PHP实现图片不变型裁剪及图片按比例裁剪的方法
2016/01/14 PHP
JScript中的&quot;this&quot;关键字使用方式补充材料
2007/03/08 Javascript
自动完成JS类(纯JS, Ajax模式)
2009/03/12 Javascript
jQuery 性能优化指南(2)
2009/05/21 Javascript
jQuery 对Select的操作备忘记录
2011/07/04 Javascript
web的各种前端打印方法之jquery打印插件PrintArea实现网页打印
2013/01/09 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
jquery网页元素拖拽插件效果及实现
2013/08/05 Javascript
jQuery简单实现iframe的高度根据页面内容自适应的方法
2016/08/01 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
AngularJS封装指令方法详解
2016/12/12 Javascript
在vue中解决提示警告 for循环报错的方法
2018/09/28 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
vue项目打包之后背景样式丢失的解决方案
2019/01/17 Javascript
[01:19:35]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#2Fnatic VS OG第二局
2016/03/05 DOTA
python通过pil模块获得图片exif信息的方法
2015/03/16 Python
详解Python3中字符串中的数字提取方法
2017/01/14 Python
安装Python的教程-Windows
2017/07/22 Python
Python获取本机所有网卡ip,掩码和广播地址实例代码
2018/01/22 Python
Python基于lxml模块解析html获取页面内所有叶子节点xpath路径功能示例
2018/05/16 Python
Python中pip更新和三方插件安装说明
2018/07/08 Python
WIn10+Anaconda环境下安装PyTorch(避坑指南)
2019/01/30 Python
通过python实现随机交换礼物程序详解
2019/07/10 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
关于Tensorflow 模型持久化详解
2020/02/12 Python
如何使用scrapy中的ItemLoader提取数据
2020/09/30 Python
美国标志性加大尺码时装品牌:Ashley Stewart
2016/12/15 全球购物
周仰杰(JIMMY CHOO)英国官方网站:闻名世界的鞋子品牌
2018/10/28 全球购物
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
几道Java和数据库的面试题
2013/05/30 面试题
医院领导班子整改方案
2014/10/01 职场文书
2014年数学教师工作总结
2014/12/03 职场文书
创业计划书之家政服务
2019/09/18 职场文书
浅谈TypeScript 索引签名的理解
2021/10/16 Javascript
MySQL中LAG()函数和LEAD()函数的使用
2022/08/14 MySQL