Python字典中的键映射多个值的方法(列表或者集合)


Posted in Python onOctober 17, 2018

一个字典就是一个键对应一个单值的映射。如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中, 比如列表或者集合里面。比如,你可以像下面这样构造这样的字典:

d = {
 'a' : [1, 2, 3],
 'b' : [4, 5]
}
e = {
 'a' : {1, 2, 3},
 'b' : {4, 5}
}

选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表, 如果想去掉重复元素就使用集合(并且不关心元素的顺序问题)。

你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。 defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值,所以你只需要关注添加元素操作了。

比如:

from collections import defaultdict

d = defaultdict(list)
d['a'].append(1)
d['a'].append(2)
d['b'].append(4)

d = defaultdict(set)
d['a'].add(1)
d['a'].add(2)
d['b'].add(4)

需要注意的是, defaultdict 会自动为将要访问的键(就算目前字典中并不存在这样的键)创建映射实体。 如果你并不需要这样的特性,你可以在一个普通的字典上使用 setdefault() 方法来代替。比如:

d = {} # A regular dictionary
d.setdefault('a', []).append(1)
d.setdefault('a', []).append(2)
d.setdefault('b', []).append(4)

但是很多程序员觉得 setdefault() 用起来有点别扭。因为每次调用都得创建一个新的初始值的实例(例子程序中的空列表 [] )。

讨论

一般来讲,创建一个多值映射字典是很简单的。但是,如果你选择自己实现的话,那么对于值的初始化可能会有点麻烦, 你可能会像下面这样来实现:

d = {}
for key, value in pairs:
 if key not in d:
  d[key] = []
 d[key].append(value)

如果使用 defaultdict 的话代码就更加简洁了:

d = defaultdict(list)
for key, value in pairs:
 d[key].append(value)

以上这篇Python字典中的键映射多个值的方法(列表或者集合)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
写了个监控nginx进程的Python脚本
May 10 Python
python字符串替换示例
Apr 24 Python
详解Python3中的Sequence type的使用
Aug 01 Python
Python机器学习之SVM支持向量机
Dec 27 Python
Windows下将Python文件打包成.EXE可执行文件的方法
Aug 03 Python
OpenCV2从摄像头获取帧并写入视频文件的方法
Aug 03 Python
python 发送json数据操作实例分析
Oct 15 Python
python实现字符串和数字拼接
Mar 02 Python
Python如何通过百度翻译API实现翻译功能
Apr 02 Python
Python 如何批量更新已安装的库
May 26 Python
Python confluent kafka客户端配置kerberos认证流程详解
Oct 12 Python
Python之matplotlib绘制饼图
Apr 13 Python
python字典值排序并取出前n个key值的方法
Oct 17 #Python
Python中创建二维数组
Oct 17 #Python
解决Python获取字典dict中不存在的值时出错问题
Oct 17 #Python
Python3.6简单的操作Mysql数据库的三个实例
Oct 17 #Python
解决python中遇到字典里key值为None的情况,取不出来的问题
Oct 17 #Python
使用Python实现在Windows下安装Django
Oct 17 #Python
python 保存float类型的小数的位数方法
Oct 17 #Python
You might like
PHP函数常用用法小结
2010/02/08 PHP
php数组函数序列之array_search()- 按元素值返回键名
2011/11/04 PHP
PHP5.3与5.5废弃与过期函数整理汇总
2014/07/10 PHP
如何使用jQuery+PHP+MySQL来实现一个在线测试项目
2015/04/26 PHP
php实现微信模板消息推送
2018/03/30 PHP
网页自动刷新,不产生嗒嗒声的一个解决方法
2007/03/27 Javascript
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
JSP中使用JavaScript动态插入删除输入框实现代码
2014/06/13 Javascript
Jquery中Event对象属性小结
2015/02/27 Javascript
使用jQuery在对象中缓存选择器的简单方法
2015/06/30 Javascript
jQuery满意度星级评价插件特效代码分享
2015/08/19 Javascript
JavaScript对象学习小结
2015/09/02 Javascript
JavaScript继承模式粗探
2016/01/12 Javascript
JS识别浏览器类型(电脑浏览器和手机浏览器)
2016/11/18 Javascript
javascript编写简易计算器
2017/05/06 Javascript
jquery实现左右轮播图效果
2017/09/28 jQuery
Vue cli+mui 区域滚动的实例代码
2018/01/25 Javascript
关于vue编译版本引入的问题的解决
2018/09/17 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
PWA介绍及快速上手搭建一个PWA应用的方法
2019/01/27 Javascript
前端开发之便利店收银系统代码
2019/12/27 Javascript
Vue router传递参数并解决刷新页面参数丢失问题
2020/12/02 Vue.js
[55:25]VGJ.T vs Optic Supermajor小组赛D组 BO3 第三场 6.3
2018/06/04 DOTA
小小聊天室Python代码实现
2016/08/17 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
django drf框架中的user验证以及JWT拓展的介绍
2019/08/12 Python
python多线程分块读取文件
2019/08/29 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
Python3 mmap内存映射文件示例解析
2020/03/23 Python
突袭HTML5之Javascript API扩展5—其他扩展(应用缓存/服务端消息/桌面通知)
2013/01/31 HTML / CSS
电子商务专业推荐信范文
2013/12/02 职场文书
仓库主管岗位职责
2014/03/02 职场文书
小学二年级学生评语
2014/04/21 职场文书
初中军训感想
2015/08/07 职场文书
2016入党积极分子党课培训心得体会
2016/01/06 职场文书
如何使用python包中的sched事件调度器
2022/04/30 Python