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 相关文章推荐
用map函数来完成Python并行任务的简单示例
Apr 02 Python
使用Python脚本将文字转换为图片的实例分享
Aug 29 Python
python使用opencv进行人脸识别
Apr 07 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
python 简单照相机调用系统摄像头实现方法 pygame
Aug 03 Python
python实现飞机大战
Sep 11 Python
python实现从文件中读取数据并绘制成 x y 轴图形的方法
Oct 14 Python
python 实现将txt文件多行合并为一行并将中间的空格去掉方法
Dec 20 Python
python利用7z批量解压rar的实现
Aug 07 Python
详解Django CAS 解决方案
Oct 30 Python
python中温度单位转换的实例方法
Dec 27 Python
python如何实现递归转非递归
Feb 25 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
一个简单的自动发送邮件系统(一)
2006/10/09 PHP
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
四个PHP非常实用的功能
2015/09/29 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
大家须知简单的php性能优化注意点
2016/01/04 PHP
php单元测试phpunit入门实例教程
2017/11/17 PHP
PHP聊天室简单实现方法详解
2018/12/08 PHP
js 页面输出值
2008/11/30 Javascript
javascript多种数据类型表格排序代码分析
2010/09/11 Javascript
初窥JQuery(一)jquery选择符 必备知识点
2010/11/25 Javascript
DWR实现模拟Google搜索效果实现原理及代码
2013/01/30 Javascript
AngularJS初始化过程分析(引导程序)
2014/12/06 Javascript
bootstrap table之通用方法( 时间控件,导出,动态下拉框, 表单验证 ,选中与获取信息)代码分享
2017/01/24 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
几个你不知道的技巧助你写出更优雅的vue.js代码
2018/06/11 Javascript
layui中使用jquery控制radio选中事件的示例代码
2018/08/15 jQuery
详解Vue后台管理系统开发日常总结(组件PageHeader)
2019/11/01 Javascript
原理深度解析Vue的响应式更新比React快
2020/04/04 Javascript
小程序开发之模态框组件封装
2020/04/23 Javascript
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
详解nginx配置vue h5 history去除#号
2020/11/09 Javascript
[02:35]DOTA2英雄基础教程 狙击手
2014/01/14 DOTA
python中使用enumerate函数遍历元素实例
2014/06/16 Python
Python实现将目录中TXT合并成一个大TXT文件的方法
2015/07/15 Python
python学习教程之Numpy和Pandas的使用
2017/09/11 Python
Python 实现删除某路径下文件及文件夹的实例讲解
2018/04/24 Python
python正向最大匹配分词和逆向最大匹配分词的实例
2018/11/14 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
python下载的库包存放路径
2020/07/27 Python
美国办公用品购物网站:Quill.com
2016/09/01 全球购物
size?爱尔兰官方网站:英国伦敦的球鞋精品店
2019/03/31 全球购物
物业客服专员岗位职责
2013/11/30 职场文书
大学生的四年学习自我评价
2013/12/13 职场文书
2014年应急工作总结
2014/12/11 职场文书
2015年全国爱眼日活动小结
2015/02/27 职场文书
行政二审代理词
2015/05/25 职场文书