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的Flask站点中集成xhEditor文本编辑器的教程
Jun 13 Python
15行Python代码带你轻松理解令牌桶算法
Mar 21 Python
pandas 快速处理 date_time 日期格式方法
Nov 12 Python
Python3标准库总结
Feb 19 Python
python 动态迁移solr数据过程解析
Sep 04 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
使用pyshp包进行shapefile文件修改的例子
Dec 06 Python
python实现在一个画布上画多个子图
Jan 19 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
Feb 25 Python
python网络编程socket实现服务端、客户端操作详解
Mar 24 Python
python 画图 图例自由定义方式
Apr 17 Python
python 解决Fatal error in launcher:错误问题
May 21 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
PHP4实际应用经验篇(3)
2006/10/09 PHP
一个比较简单的PHP 分页分组类
2009/12/10 PHP
解析php利用正则表达式解决采集内容排版的问题
2013/06/20 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
教你在header中隐藏php的版本信息
2016/08/10 PHP
Android AsyncTack 异步任务实例详解
2016/11/02 PHP
用PHP去掉文件头的Unicode签名(BOM)方法
2017/06/22 PHP
ajax+php实现无刷新验证手机号的实例
2017/12/22 PHP
php设计模式之策略模式应用案例详解
2019/06/17 PHP
JavaScript实现动态增加文件域表单
2009/02/12 Javascript
JavaScript 32位整型无符号操作示例
2013/12/08 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
简单分析javascript面向对象与原型
2015/05/21 Javascript
解析javascript中鼠标滚轮事件
2015/05/26 Javascript
jquery datatable服务端分页
2016/08/31 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
jquery.tableSort.js表格排序插件使用方法详解
2020/08/12 Javascript
node.js express中app.param的用法详解
2017/07/16 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
2018/01/10 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
Vue+Django项目部署详解
2019/05/30 Javascript
js实现掷骰子小游戏
2019/10/24 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
原生JavaScript实现进度条
2021/02/19 Javascript
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
python实现简单名片管理系统
2018/11/30 Python
Django框架实现的简单分页功能示例
2018/12/04 Python
Python3标准库之functools管理函数的工具详解
2020/02/27 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
SEPHORA新西兰官方网站:购买化妆品和护肤品
2016/12/02 全球购物
俄罗斯女装店:12storeez
2019/10/25 全球购物
舞蹈专业大学生职业规划范文
2014/03/12 职场文书
青年文明号申报材料
2014/12/23 职场文书
王亚平太空授课观后感
2015/06/12 职场文书