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计算圆周长、面积、球体体积并画出圆
Apr 08 Python
深入理解python函数递归和生成器
Jun 06 Python
Python编程求解二叉树中和为某一值的路径代码示例
Jan 04 Python
浅谈Python对内存的使用(深浅拷贝)
Jan 17 Python
python K近邻算法的kd树实现
Sep 06 Python
python修改FTP服务器上的文件名
Sep 11 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
Python+OpenCV 实现图片无损旋转90°且无黑边
Dec 12 Python
如何解决cmd运行python提示不是内部命令
Jul 01 Python
pymysql模块使用简介与示例
Nov 17 Python
python利用文件时间批量重命名照片和视频
Feb 09 Python
Python接口自动化之文件上传/下载接口详解
Apr 05 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
无线电广播与收音机发展的历史回眸
2021/03/02 无线电
Smarty安装配置方法
2008/04/10 PHP
php 图片上添加透明度渐变的效果
2009/06/29 PHP
php 编写安全的代码时容易犯的错误小结
2010/05/20 PHP
PHP学习 变量使用总结
2011/03/24 PHP
Laravel定时任务的每秒执行代码
2019/10/22 PHP
从jQuery.camelCase()学习string.replace() 函数学习
2011/09/13 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
jquery弹窗插件colorbox绑定动态生成元素的方法
2014/06/20 Javascript
JavaScript中对象介绍
2014/12/31 Javascript
Bootstrap3使用typeahead插件实现自动补全功能
2016/07/07 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
JavaScript实现HTML5游戏断线自动重连的方法
2017/09/18 Javascript
使用VUE实现在table中文字信息超过5个隐藏鼠标移到时弹窗显示全部
2019/09/16 Javascript
Layer组件多个iframe弹出层打开与关闭及参数传递的方法
2019/09/25 Javascript
微信小程序实现吸顶特效
2020/01/08 Javascript
JavaScript异步操作的几种常见处理方法实例总结
2020/05/11 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
vue项目实现减少app.js和vender.js的体积操作
2020/11/12 Javascript
js实现简单的倒计时
2021/01/28 Javascript
python进阶教程之文本文件的读取和写入
2014/08/29 Python
python私有属性和方法实例分析
2015/01/15 Python
Python嵌套列表转一维的方法(压平嵌套列表)
2018/07/03 Python
pandas.DataFrame删除/选取含有特定数值的行或列实例
2018/11/07 Python
python使用PIL和matplotlib获取图片像素点并合并解析
2019/09/10 Python
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
英国最大的专业户外零售商:Mountain Warehouse
2018/06/06 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
德国购买门票网站:ADticket.de
2019/10/31 全球购物
Hotels.com日本:国外和海外住宿,酒店预订
2019/12/13 全球购物
应届毕业生的自我鉴定
2013/11/13 职场文书
4s店市场专员岗位职责
2014/04/09 职场文书
民间个人借款协议书
2014/09/30 职场文书
假期读书倡议书3篇
2019/08/19 职场文书
python 爬取豆瓣网页的示例
2021/04/13 Python
Z-Order加速Hudi大规模数据集方案分析
2022/03/31 Servers