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冒泡排序算法的实现代码
Nov 21 Python
Python计算三角函数之asin()方法的使用
May 15 Python
Python三级目录展示的实现方法
Sep 28 Python
用python实现简单EXCEL数据统计的实例
Jan 24 Python
scrapy spider的几种爬取方式实例代码
Jan 25 Python
selenium+python实现自动化登录的方法
Sep 04 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
python Dijkstra算法实现最短路径问题的方法
Sep 19 Python
浅谈Python中os模块及shutil模块的常规操作
Apr 03 Python
完美解决Django2.0中models下的ForeignKey()问题
May 19 Python
Python requests HTTP验证登录实现流程
Nov 05 Python
Python深度学习之Pytorch初步使用
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
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
php防止网站被刷新的方法汇总
2014/12/01 PHP
php输入数据统一类实例
2015/02/23 PHP
初识ThinkPHP控制器
2016/04/07 PHP
jQuery UI Dialog控件中的表单无法正常提交的解决方法
2010/12/19 Javascript
js使下拉列表框可编辑不止是选择
2013/12/12 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
js实现的简单radio背景颜色选择器代码
2015/08/18 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
js 动态添加元素(div、li、img等)及设置属性的方法
2016/07/19 Javascript
使用jQuery实现动态添加小广告
2017/07/11 jQuery
使用JQ完成表格隔行换色的简单实例
2017/08/25 Javascript
JS排序算法之冒泡排序,选择排序与插入排序实例分析
2017/12/13 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
Vue实现固定定位图标滑动隐藏效果
2019/05/30 Javascript
Laravel admin实现消息提醒、播放音频功能
2019/07/10 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
探索node之事件循环的实现
2020/10/30 Javascript
vue 解决IOS10低版本白屏的问题
2020/11/17 Javascript
Windows下的Python 3.6.1的下载与安装图文详解(适合32位和64位)
2018/02/21 Python
python处理multipart/form-data的请求方法
2018/12/26 Python
python mysql断开重连的实现方法
2019/07/26 Python
python-Web-flask-视图内容和模板知识点西宁街
2019/08/23 Python
Python获取时间戳代码实例
2019/09/24 Python
python3用PyPDF2解析pdf文件,用正则匹配数据方式
2020/05/12 Python
python怎么提高计算速度
2020/06/11 Python
印度最大的酒店品牌网络:OYO Rooms
2016/07/24 全球购物
中国酒类在线零售网站:酒仙网
2016/08/20 全球购物
Vivo俄罗斯官方在线商店:中国智能手机品牌
2019/10/04 全球购物
事业单位接收函
2014/01/10 职场文书
企业出纳岗位职责
2014/03/12 职场文书
教学质量评估实施方案
2014/03/17 职场文书
医院2014国庆节活动策划方案
2014/09/21 职场文书
Redis+Lua脚本实现计数器接口防刷功能(升级版)
2022/02/12 Redis