《Python Cookbook 3rd》笔记(1.6):字典中的键映射多个值
字典中的键映射多个值
问题
怎样实现一个键对应多个值的字典 (也叫 multidict )?
解法
一个字典就是一个键对应一个单值的映射。如果你想要一个键映射多个值,那么你就需要将这多个值放到另外的容器中,比如列表或者集合里面。比如,你可以像下面这样构造这样的字典:
d = {'a' : [1, 2, 3],'b' : [4, 5]
}e = {'a' : {1, 2, 3},'b' : {4, 5}
}
选择使用列表还是集合取决于你的实际需求。如果你想保持元素的插入顺序就应该使用列表,如果想去掉重复元素并且不关心元素的顺序问题,就使用集合。
你可以很方便的使用 collections 模块中的 defaultdict 来构造这样的字典。defaultdict 的一个特征是它会自动初始化每个 key 刚开始对应的值,所以你只需要关注添加元素操作了。比如:
from collections import defaultdictd = 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 Cookbook 3rd》笔记(1.6):字典中的键映射多个值相关推荐
- 《Python Cookbook 3rd》笔记汇总
文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...
- 《Python cookbook》笔记一
<Python cookbook> 第一章 数据结构和算法 - *号解压多个变量 - 如果一个可迭代对象的元素个数超过变量个数时,会抛出一个 ValueError .那么 怎样才能从这个可 ...
- 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素
<Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...
- Python Cookbook 3rd Edition Documentation
Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...
- Machine Learning with Python Cookbook 学习笔记 第6章
Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...
- 《Python cookbook》笔记二
<Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...
- Machine Learning with Python Cookbook 学习笔记 第8章
Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...
- Machine Learning with Python Cookbook 学习笔记 第9章
Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...
- python中字典的键是唯一的吗_在python3中反转字典中的键和值(值不唯一)
我知道当值是唯一的时,如何简单地在字典中反转键和值. 但是当值不唯一时如何反转. 根据要求,如果值出现不止一次,我需要使用set来将它们组合在一起. 防爆.输入d = {'a':1,'b':2,'c' ...
最新文章
- vijos 1476 旅游规划题解
- xcode打包(Archive)显示Command /usr/bin/codesign failed
- GNU ARM汇编--(二)汇编编译链接与运行
- Adobe宣布不再针对iPhone开发Flash工具
- 数据结构和算法分析:第三章 表、队列和栈
- php赋值权重_php权重计算方法代码分享
- Visual Studio的调试技巧
- 最大功率点跟踪_ADI公司推出集成最大功率点跟踪和I2C的80V降压升压电池充电控制器...
- Stack Overflow 2021开发者调查报告 - 数据库篇!
- 选择排序:简单选择排序
- 米斯特白帽培训讲义(v2)信息收集
- 谷歌 AI 中国中心彻底变天了!
- 20191126_1_电影票房分析
- office新建文件打开提示文件格式或扩展名无效
- 我们到底在恐惧什么?
- android视频动态壁纸app,短视频动态壁纸转换
- plotly绘制简单图形10--金字塔图
- barcode4j CODE128/EAN128生成 不定长 msg值 分隔符
- 盘点适合入门学习的C/C++开源项目
- 服务器主板显示ff,主板诊断卡代码显示ff的维修方法
热门文章
- S3C6410启动模式介绍
- linux将文件下载到本地windows,XSHELL下直接下载文件到本地(Windows)
- 职场上个人的核心技术_职场上,这3种人表面老实,实际却是个“高手”,要远离...
- python词频统计代码_机器学习必备宝典-《统计学习方法》的python代码实现及课件...
- 外架小横杆外露长度规范要求_安全文明施工规范
- C语言程序设计(代码+知识点)
- 【转】C#开发奇技淫巧三:把dll放在不同的目录让你的程序更整洁
- 【转】C#实现SM3国密加密
- IIS/ASP.NET 管道
- 软件测试计划时要记住什么