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 将字符串转换成字典dict
Mar 24 Python
Python基于tkinter模块实现的改名小工具示例
Jul 27 Python
python3爬虫获取html内容及各属性值的方法
Dec 17 Python
Django restframework 源码分析之认证详解
Feb 22 Python
Python基于opencv实现的简单画板功能示例
Mar 04 Python
python3实现二叉树的遍历与递归算法解析(小结)
Jul 03 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
浅析python内置模块collections
Nov 15 Python
在python3中实现查找数组中最接近与某值的元素操作
Feb 29 Python
浅谈Python中threading join和setDaemon用法及区别说明
May 02 Python
Python 如何在字符串中插入变量
Aug 01 Python
Python 操作pdf pdfplumber读取PDF写入Exce
Aug 14 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 获取远程文件内容的函数代码
2010/03/24 PHP
phpmyadmin打开很慢的解决方法
2014/04/21 PHP
10款实用的PHP开源工具
2015/10/23 PHP
PDO::prepare讲解
2019/01/29 PHP
Laravel框架实现文件上传的方法分析
2019/09/29 PHP
JavaScript CSS修改学习第五章 给“上传”添加样式
2010/02/19 Javascript
window.open关于浏览器拦截问题分析及解决方法
2013/02/05 Javascript
控制文字内容的显示与隐藏示例
2014/06/11 Javascript
jQuery实现Flash效果上下翻动的中英文导航菜单代码
2015/09/22 Javascript
javascript运动框架用法实例分析(实现放大与缩小效果)
2016/01/08 Javascript
jQuery中bind(),live(),delegate(),on()绑定事件方法实例详解
2016/01/19 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
使用webpack搭建react开发环境的方法
2018/05/15 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
vue实现带复选框的树形菜单
2019/05/27 Javascript
JavaScript Array对象基本方法详解
2019/09/03 Javascript
Ant design vue table 单击行选中 勾选checkbox教程
2020/10/24 Javascript
Python获取apk文件URL地址实例
2013/11/01 Python
Python的Django框架中TEMPLATES项的设置教程
2015/05/29 Python
Python 网页解析HTMLParse的实例详解
2017/08/10 Python
Python读取视频的两种方法(imageio和cv2)
2018/04/15 Python
python hough变换检测直线的实现方法
2019/07/12 Python
Python监控服务器实用工具psutil使用解析
2019/12/19 Python
Python使用turtle库绘制小猪佩奇(实例代码)
2020/01/16 Python
Python3 shelve对象持久存储原理详解
2020/03/23 Python
Python3标准库之dbm UNIX键-值数据库问题
2020/03/24 Python
Python + selenium + crontab实现每日定时自动打卡功能
2020/03/31 Python
亚洲独特体验旅游专家:eOasia
2018/08/15 全球购物
都柏林通行卡/城市通票:The Dublin Pass
2020/02/16 全球购物
线程的基本概念、线程的基本状态以及状态之间的关系
2012/10/26 面试题
事业单位绩效考核实施方案
2014/03/27 职场文书
2014年物资管理工作总结
2014/12/02 职场文书
庆祝教师节主题班会
2015/08/17 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书
TS 类型兼容教程示例详解
2022/09/23 Javascript