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实现的tab文件操作类分享
Nov 20 Python
对python内置map和six.moves.map的区别详解
Dec 19 Python
详解python使用turtle库来画一朵花
Mar 21 Python
numpy.linspace函数具体使用详解
May 27 Python
python实现WebSocket服务端过程解析
Oct 18 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
Python TCPServer 多线程多客户端通信的实现
Dec 31 Python
jupyter notebook 实现matplotlib图动态刷新
Apr 22 Python
3种适用于Python的疯狂秘密武器及原因解析
Apr 29 Python
python能在浏览器能运行吗
Jun 17 Python
Python Matplotlib绘制条形图的全过程
Oct 24 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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实现图片压缩
2020/09/09 PHP
jquery验证手机号码、邮箱格式是否正确示例代码
2013/07/28 Javascript
JavaScript通过元素的ID和name设置样式
2014/07/08 Javascript
Jquery插件之Fancybox丰富的弹出层效果附源码下载
2015/12/02 Javascript
jQuery+Ajax+PHP弹出层异步登录效果(附源码下载)
2016/05/27 Javascript
深入浅析JavaScript函数前面的加号和叹号
2016/07/09 Javascript
JavaScript实战之带收放动画效果的导航菜单
2016/08/16 Javascript
用jquery获取自定义的标签属性的值简单实例
2016/09/17 Javascript
BootStrap注意事项小结(五)表单
2017/03/10 Javascript
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
2018/01/08 jQuery
使用异步controller与jQuery实现卷帘式分页
2019/06/18 jQuery
七行JSON代码把你的网站变成移动应用过程详解
2019/07/09 Javascript
javascript执行上下文、变量对象实例分析
2020/04/25 Javascript
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python编程之多态用法实例详解
2015/05/19 Python
Python中的ctime()方法使用教程
2015/05/22 Python
Python 编码Basic Auth使用方法简单实例
2017/05/25 Python
Python中关键字global和nonlocal的区别详解
2018/09/03 Python
python导入pandas具体步骤方法
2019/06/23 Python
关于numpy数组轴的使用详解
2019/12/05 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
Pandas之缺失数据的实现
2021/01/06 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
纯CSS3实现鼠标滑过按钮动画第二节
2020/07/16 HTML / CSS
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
TUMI澳大利亚网站:美国旅行箱包品牌
2017/03/27 全球购物
Lululemon加拿大官网:加拿大知名体育服装零售商
2019/04/12 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
社区母亲节活动记录
2014/03/06 职场文书
财务会计专业求职信
2014/06/09 职场文书
2014年党的群众路线学习心得体会
2014/11/05 职场文书
成本会计实训报告
2014/11/05 职场文书
开学第一周总结
2015/07/16 职场文书
原生CSS实现文字无限轮播的通用方法
2021/03/30 HTML / CSS
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
Spring Boot项目如何优雅实现Excel导入与导出功能
2022/06/10 Java/Android