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根据经纬度计算距离示例
Feb 16 Python
Python函数的周期性执行实现方法
Aug 13 Python
Python中正则表达式详解
May 17 Python
Linux下python制作名片示例
Jul 20 Python
python将txt文档每行内容循环插入数据库的方法
Dec 28 Python
Python爬虫实战之12306抢票开源
Jan 24 Python
对Python _取log的几种方式小结
Jul 25 Python
详解如何在cmd命令窗口中搭建简单的python开发环境
Aug 29 Python
Pycharm无法打开双击没反应的问题及解决方案
Aug 17 Python
django有哪些好处和优点
Sep 01 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
pycharm 多行批量缩进和反向缩进快捷键介绍
Jan 15 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过程中的一些注意点的总结
2013/10/25 PHP
php给图片加文字水印
2015/07/31 PHP
laravel5使用freetds连接sql server的方法
2018/12/07 PHP
Laravel框架Request、Response及Session操作示例
2019/05/06 PHP
laravel-admin select框默认选中的方法
2019/10/03 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
2020/02/16 PHP
PHP实现倒计时功能
2020/11/16 PHP
用javascript实现的图片马赛克后显示并切换加文字功能
2007/04/21 Javascript
Jquery Ajax请求代码(2)
2011/01/07 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
jQuery中remove()方法用法实例
2014/12/25 Javascript
JavaScript中Object.prototype.toString方法的原理
2016/02/24 Javascript
js实现文字滚动效果
2016/03/03 Javascript
JavaScript开发Chrome浏览器扩展程序UI的教程
2016/05/16 Javascript
Bootstrap安装环境配置教程分享
2016/05/27 Javascript
jQuery 控制文本框自动缩小字体填充
2017/06/16 jQuery
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
Webpack path与publicPath的区别详解
2018/05/03 Javascript
微信小程序实现通过js操作wxml的wxss属性示例
2018/12/06 Javascript
JS基础之逻辑结构与循环操作示例
2020/01/19 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
vscode中的vue项目报错Property ‘xxx‘ does not exist on type ‘CombinedVueInstance<{ readyOnly...Vetur(2339)
2020/09/11 Javascript
详解vue3.0 的 Composition API 的一种使用方法
2020/10/26 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
Python的Django框架可适配的各种数据库介绍
2015/07/15 Python
对TensorFlow的assign赋值用法详解
2018/07/30 Python
python logging 日志的级别调整方式
2020/02/21 Python
python 中的9个实用技巧,助你提高开发效率
2020/08/30 Python
瑞典手机壳品牌:Richmond & Finch
2018/04/28 全球购物
GAZMAN官网:澳大利亚领先的男装品牌
2019/12/19 全球购物
Abbott Lyon官网:女士手表、珠宝及配件
2020/12/26 全球购物
英国Iceland杂货店:网上食品购物
2020/12/16 全球购物
培训协议书范本
2014/04/22 职场文书
中学教师师德师风演讲稿
2014/08/22 职场文书
晚会开幕词
2015/01/28 职场文书
2016年学校综治宣传月活动总结
2016/03/16 职场文书