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根据路径导入模块的方法
Sep 30 Python
Python单例模式实例分析
Jan 14 Python
使用Python设置tmpfs来加速项目的教程
Apr 17 Python
Python实现在matplotlib中两个坐标轴之间画一条直线光标的方法
May 20 Python
Python判断某个用户对某个文件的权限
Oct 13 Python
Python实现注册登录系统
Aug 08 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
Feb 13 Python
Python中利用xpath解析HTML的方法
May 14 Python
Pandas 解决dataframe的一列进行向下顺移问题
Dec 27 Python
总结python 三种常见的内存泄漏场景
Nov 20 Python
pytorch 中nn.Dropout的使用说明
May 20 Python
Python使用BeautifulSoup4修改网页内容
May 20 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
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
发布一个迷你php+AJAX聊天程序[聊天室]提供下载
2007/07/21 PHP
Windows下部署Apache+PHP+MySQL运行环境实战
2012/08/31 PHP
实现PHP搜索加分页
2016/10/12 PHP
ThinkPHP框架实现导出excel数据的方法示例【基于PHPExcel】
2018/05/12 PHP
JavaScript 给汉字排序实例代码
2008/06/28 Javascript
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
Cookie 注入是怎样产生的
2009/04/08 Javascript
javascript 对象比较实现代码
2009/04/27 Javascript
jquery关于页面焦点的定位(文本框获取焦点时改变样式 )
2010/09/10 Javascript
jQuery中cookie插件用法实例分析
2015/12/04 Javascript
jQuery EasyUI之DataGrid使用实例详解
2016/01/04 Javascript
AngulerJS学习之按需动态加载文件
2017/02/13 Javascript
javascript如何用递归写一个简单的树形结构示例
2017/09/06 Javascript
微信小程序中setInterval的使用方法
2017/09/29 Javascript
详解vue如何使用rules对表单字段进行校验
2018/10/17 Javascript
微信小程序使用npm支持踩坑
2018/11/07 Javascript
微信小程序实现获取用户信息并存入数据库操作示例
2019/05/07 Javascript
解析Python中的生成器及其与迭代器的差异
2016/06/20 Python
动态规划之矩阵连乘问题Python实现方法
2017/11/27 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
2018/05/25 Python
python中sys.argv函数精简概括
2018/07/08 Python
Django压缩静态文件的实现方法详析
2018/08/26 Python
python for和else语句趣谈
2019/07/02 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
Pytest单元测试框架如何实现参数化
2020/09/05 Python
简单整理HTML5的基本特性和语法
2016/02/18 HTML / CSS
AmazeUI在模态框中嵌入表单形成模态输入框
2020/08/20 HTML / CSS
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
高中同学聚会邀请函
2014/01/11 职场文书
12月红领巾广播稿
2014/02/13 职场文书
运动会闭幕词
2015/01/28 职场文书
银行优秀员工推荐信
2015/03/24 职场文书
大学生实习推荐信
2015/03/27 职场文书
毕业实习证明范本
2015/06/16 职场文书
小学英语教师2015年度个人工作总结
2015/10/14 职场文书