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 相关文章推荐
Linux下使用python自动修改本机网关代码分享
May 21 Python
Python列表list解析操作示例【整数操作、字符操作、矩阵操作】
Jul 25 Python
Python实现抓取网页生成Excel文件的方法示例
Aug 05 Python
Python字符串拼接六种方法介绍
Dec 18 Python
Python 串口读写的实现方法
Jun 12 Python
机器学习实战之knn算法pandas
Jun 22 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
Python中BeautifuSoup库的用法使用详解
Nov 15 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
Python JSON常用编解码方法代码实例
Sep 05 Python
Pycharm在指定目录下生成文件和删除文件的实现
Dec 28 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中使用json数据格式定义字面量对象的方法
2014/08/20 PHP
从零开始学YII2框架(五)快速生成代码工具 Gii 的使用
2014/08/20 PHP
PHP+shell实现多线程的方法
2015/07/01 PHP
JavaScript实现禁止后退的方法
2006/12/27 Javascript
用 javascript 实现的点击复制代码
2007/03/24 Javascript
JScript中使用ADODB.Stream判断文件编码的代码
2008/06/09 Javascript
javascript 复杂的嵌套环境中输出单引号和双引号
2009/05/26 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
jquery isEmptyObject判断是否为空对象的函数
2011/02/14 Javascript
window.event.keyCode兼容IE和Firefox实现js代码
2013/05/30 Javascript
eclipse导入jquery包后报错的解决方法
2014/02/17 Javascript
jQuery的cookie插件实现保存用户登陆信息
2014/04/15 Javascript
Extjs Label的 fieldLabel和html属性值对齐的方法
2014/06/15 Javascript
JavaScript设计模式之代理模式介绍
2014/12/28 Javascript
谈谈我对JavaScript原型和闭包系列理解(随手笔记9)
2015/12/24 Javascript
jQuery Mobile页面返回不需要重新get
2016/04/26 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
如何在vue中使用ts的示例代码
2018/02/28 Javascript
python网络编程学习笔记(三):socket网络服务器
2014/06/09 Python
Python实现从脚本里运行scrapy的方法
2015/04/07 Python
在Python中执行系统命令的方法示例详解
2017/09/14 Python
python+pillow绘制矩阵盖尔圆简单实例
2018/01/16 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
python数据预处理之数据标准化的几种处理方式
2019/07/17 Python
python global和nonlocal用法解析
2020/02/03 Python
Python实现桌面翻译工具【新手必学】
2020/02/12 Python
windows上彻底删除jupyter notebook的实现
2020/04/13 Python
keras导入weights方式
2020/06/12 Python
weblogic面试题
2016/03/07 面试题
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
如何唤起类中的一个方法
2013/11/29 面试题
2015年学生资助工作总结
2015/05/25 职场文书
博物馆观后感
2015/06/05 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
SQL Server表分区降低运维和维护成本
2022/04/08 SQL Server