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 示例分享---逻辑推理编程解决八皇后
Jul 20 Python
Python对列表排序的方法实例分析
May 16 Python
详解Python的collections模块中的deque双端队列结构
Jul 07 Python
Python2/3中urllib库的一些常见用法
Dec 19 Python
使用Python制作微信跳一跳辅助
Jan 31 Python
Python实现修改IE注册表功能示例
May 10 Python
python用for循环求和的方法总结
Jul 08 Python
pandas 对group进行聚合的例子
Dec 27 Python
python实现门限回归方式
Feb 29 Python
关于win10在tensorflow的安装及在pycharm中运行步骤详解
Mar 16 Python
使用Dajngo 通过代码添加xadmin用户和权限(组)
Jul 03 Python
Django migrate报错的解决方案
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
gd库图片下载类实现下载网页所有图片的php代码
2012/08/20 PHP
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
php5.4以上版本GBK编码下htmlspecialchars输出为空问题解决方法汇总
2015/04/03 PHP
PHP基于GD2函数库实现验证码功能示例
2019/01/27 PHP
laravel入门知识点整理
2020/09/15 PHP
用htc组件制作windows选项卡
2007/01/13 Javascript
基于jquery的监控数据是否发生改变
2011/04/11 Javascript
在javascript中对于DOM的加强
2013/04/11 Javascript
全屏js头像上传插件源码高清版
2016/03/29 Javascript
第一次动手实现bootstrap table分页效果
2016/09/22 Javascript
JS滚动到指定位置导航栏固定顶部
2017/07/03 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
详解处理Vue单页面应用SEO的另一种思路
2018/11/09 Javascript
解决vue 界面在苹果手机上滑动点击事件等卡顿问题
2018/11/27 Javascript
微信小程序云开发之数据库操作
2019/05/18 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
Python yield 小结和实例
2014/04/25 Python
python使用PythonMagick将jpg图片转换成ico图片的方法
2015/03/26 Python
Python实现基于PIL和tesseract的验证码识别功能示例
2018/07/11 Python
解决Pycharm界面的子窗口不见了的问题
2019/01/17 Python
django中的图片验证码功能
2019/09/18 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
python 进制转换 int、bin、oct、hex的原理
2021/01/13 Python
详解Python模块化编程与装饰器
2021/01/16 Python
Linux如何为某个操作添加别名
2015/02/05 面试题
护理学毕业生自荐信
2013/10/02 职场文书
生产经理的自我评价分享
2013/11/07 职场文书
销售总监工作职责
2013/11/21 职场文书
自我评价中英文语句
2013/11/30 职场文书
服装发布会策划方案
2014/05/22 职场文书
冰峪沟导游词
2015/02/09 职场文书
土木工程毕业答辩开场白
2015/05/29 职场文书
2016大学生求职自荐信范文
2016/01/28 职场文书
pytorch中的model.eval()和BN层的使用
2021/05/22 Python
MySQL定时备份数据库(全库备份)的实现
2021/09/25 MySQL
如何Tomcat中使用ipv6地址
2022/05/06 Servers