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 相关文章推荐
使用Python编写Linux系统守护进程实例
Feb 03 Python
Python Tkinter GUI编程入门介绍
Mar 10 Python
用Python的Django框架完成视频处理任务的教程
Apr 02 Python
python 捕获 shell/bash 脚本的输出结果实例
Jan 04 Python
Python构建网页爬虫原理分析
Dec 19 Python
python 不以科学计数法输出的方法
Jul 16 Python
python射线法判断检测点是否位于区域外接矩形内
Jun 28 Python
python给指定csv表格中的联系人群发邮件(带附件的邮件)
Dec 31 Python
python_mask_array的用法
Feb 18 Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 Python
利用Python发送邮件或发带附件的邮件
Nov 12 Python
教你如何使用Python实现二叉树结构及三种遍历
Jun 18 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/06/14 PHP
PHP中对于浮点型的数据需要用不同的方法解决
2014/03/11 PHP
PHP中set_include_path()函数相关用法分析
2016/07/18 PHP
Laravel 类和接口注入相关的代码
2019/10/15 PHP
JavaScript中常见陷阱小结
2010/04/27 Javascript
document.createElement()用法及注意事项(ff下不兼容)
2013/03/13 Javascript
浏览器兼容console对象的简要解决方案分享
2013/10/24 Javascript
Mac/Windows下如何安装Node.js
2013/11/22 Javascript
解析JavaScript中的不可见数据类型
2013/12/02 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
jQuery 插件开发指南
2014/11/14 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
JS实现点击按钮控制Div变宽、增高及调整背景色的方法
2015/08/05 Javascript
require.js的用法详解
2015/10/20 Javascript
JavaScript如何实现对数字保留两位小数一位自动补零
2015/12/18 Javascript
Jquery和JS获取ul中li标签的实现方法
2016/06/02 Javascript
js 中文汉字转Unicode、Unicode转中文汉字、ASCII转换Unicode、Unicode转换ASCII、中文转换
2016/12/06 Javascript
关于vue中watch检测到不到对象属性的变化的解决方法
2018/02/08 Javascript
bootstrap-table实现表头固定以及列固定的方法示例
2019/03/07 Javascript
jQuery操作元素追加内容示例
2020/01/10 jQuery
python将图片文件转换成base64编码的方法
2015/03/14 Python
Python的collections模块中的OrderedDict有序字典
2016/07/07 Python
Python实现更改图片尺寸大小的方法(基于Pillow包)
2016/09/19 Python
python实现周期方波信号频谱图
2018/07/21 Python
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
Python的Lambda函数用法详解
2019/09/03 Python
Python接口测试结果集实现封装比较
2020/05/01 Python
聚美优品陈欧广告词
2014/03/14 职场文书
财务会计专业求职信
2014/06/09 职场文书
小学课外阅读总结
2014/07/09 职场文书
反对形式主义、官僚主义、享乐主义和奢靡之风整改措施
2014/09/17 职场文书
2014年便民服务中心工作总结
2014/12/20 职场文书
小学运动会开幕词
2015/01/28 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
MySQL远程无法连接的一些常见原因总结
2022/09/23 MySQL