Pythoncookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Python
cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
本文实例讲述了Python在字典中将键映射到多个值上的方法。分享给大家供大家参考,具体如下:

问题:一个能将键(key)映射到多个值的字典(即所谓的一键多值字典[multidict])
解决方案:如果想让键映射到多值,需要将这多个值保持到另一个容器如列表或集合中;
>>>
d={'a':[1,2,3],'b':[4,5]}
>>> d
{'b': [4, 5], 'a': [1, 2, 3]}
>>>
e={'a':{1,2,3,3},'b':{4,5}}
>>> e
{'b': {4, 5}, 'a': {1, 2, 3}}
>>>
f={'a':[1,2,3,3],'b':[4,5]}
>>> f
{'b': [4, 5], 'a': [1, 2, 3, 3]}
>>>
更方便的创建这样的字典是利用collections模块中的defaultdict类。defaultdict的一个特点是它会自动给字典初始化第一个值,这样只需添加元素即可。例如:
from collections import defaultdict
d=defaultdict(list) #创建一键多值的字典,key的value是list类型
d['a'].append(1)
d['a'].append(2)
d['a'].append(2)
d['b'].append(4)
c=defaultdict(set) #创建一键多值的字典,key的value是set类型
c['a'].add(1)
c['a'].add(2)
c['a'].add(2)
c['b'].add(4)
print('key的value是list类型的字典:',d)
print('key的value是set类型的字典:',c)
>>>
================================ RESTART
================================
>>>
key的value是list类型的字典: defaultdict(, {'b': [4], 'a': [1, 2,
2]})
key的value是set类型的字典: defaultdict(, {'b': {4}, 'a': {1, 2}})
>>>
关于defaultdict需要注意的一点,他会自动创建字典表项以待稍后的访问(即使这些表项当前在字典中还没有找到)。
如果想取消这个功能,可以在普通的字典上调用setdefault()方法来取代,例如:
d={} #一个普通的字典
d.setdefault('a',[]).append(1)
d.setdefault('a',[]).append(2)
d.setdefault('a',[]).append(2)
d.setdefault('b',[]).append(4)
>>>
key的value是list类型的字典:
{'a': [1, 2, 2], 'b': [4]}
补充:
构建一个一键多值的字典很容易,但是如果试着自己对第一个值做初始化操作,这个会变得很杂乱,如果使用defaultdic后代码会简洁很多:
pairs={'a':[22,44],'b':[88]}
d=defaultdict(list)
for key,value in pairs.items():
d[key].append(value)
print (d)
>>>
defaultdict(, {'a': [[22, 44]], 'b': [[88]]})
>>>
Pythoncookbook(数据结构与算法)在字典中将键映射到多个值上的方法的更多相关文章
- 【python cookbook】【数据结构与算法】6.在字典中将键映射到多个值上
问题:一个能将键(key)映射到多个值的字典(即所谓的一键多值字典[multidict]) 解决方案:如果想让键映射到多值,需要将这多个值保持到另一个容器如列表或集合中: >>> d ...
- 『Python CoolBook』数据结构和算法_字典比较&字典和集合
一.字典元素排序 dict.keys(),dict.values(),dict.items() 结合max.min.sorted.zip进行排序是个很好的办法,另外注意不使用zip时,字典的lambd ...
- 【python cookbook】【数据结构与算法】18.将名称映射到序列的元素中
问题:希望通过名称来访问元素,减少结构中对位置的依赖性 解决方案:使用命名元组collections.namedtuple().它是一个工厂方法,返回的是python中标准元组类型的子类,提供给它一个 ...
- python3数据结构与算法
python内置的数据结构包括:列表(list).集合(set).字典(dictionary),一般情况下我们可以直接使用这些数据结构,但通常我们还需要考虑比如搜索.排序.排列以及赛选等一些常见的问题 ...
- cookbook_数据结构和算法
1.1将数据分解为单独的变量 list_a = [1,2,3,4,5,6,7,8,9] a,b,c,d,e,f,g,h,i = list_a print(a,b,c,d,e,f,g,h,i) #使用相 ...
- 【算法】字典的诞生:有序数组 PK 无序链表
参考资料 <算法(java)> — — Robert Sedgewick, Kevin Wayne <数据结构> ...
- Python 数据结构和算法
阅读目录 什么是算法 算法效率衡量 算法分析 常见时间复杂度 Python内置类型性能分析 数据结构 顺序表 链表 栈 队列 双端队列 排序与搜索 冒泡排序 选择排序 插入排序 希尔排序 快速排序 归 ...
- 数据结构与算法(Python)
数据结构与算法(Python) Why? 我们举一个可能不太恰当的例子: 如果将最终写好运行的程序比作战场,我们码农便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰 ...
- 为什么我要放弃javaScript数据结构与算法(第七章)—— 字典和散列表
本章学习使用字典和散列表来存储唯一值(不重复的值)的数据结构. 集合.字典和散列表可以存储不重复的值.在集合中,我们感兴趣的是每个值本身,并把它作为主要元素.而字典和散列表中都是用 [键,值]的形式来 ...
随机推荐
- springboot2.1.7-整合redis
在springboot1.x系列中,其中使用的是jedis,但是到了springboot2.x其中使用的是Lettuce. 此处springboot2.x,所以使用的是Lettuce.关于jedis跟 ...
- swiper 使用心得
首先,我在这次学习的最大收益是,学习新框架.或者技术,先找官方文档比较好,那里的很全,你想要的基本都有的,如果没有那就是不支持喽. 然后简单概括下是怎么用的(比较谦虚,大家勿怪) 一 .找他的官方文档 ...
- .Net界面开发必备!DevExpress Blazor UI全新组件助力界面开发
行业领先的.NET界面控件DevExpress 正式发布了v19.1版本,DevExpress UI for Blazor/ Razor组件附带7个用户界面组件(包括Data Grid和Pivot G ...
- Python获取本机所有IP地址
import socket # 查看当前主机名 print('当前主机名称为 : ' + socket.gethostname()) # 根据主机名称获取当前IP print('当前主机的IP为: ' ...
- 【51nod 2004】终结之时
题目大意 "将世界终结前最后的画面,深深刻印进死水般的心海." 祈愿没有得到回应,雷声冲破云霄,正在祈愿的洛天依受到了极大的打击. 洛天依叹了口气,说:"看来这个世界正如 ...
- ajax上传文件(javaweb)
前台:FormData, formData.append("fileName",$("#file")[0].files[0];); https://ww ...
- httpclient个人理解
httpclient:模拟浏览器发送请求,服务器会响应数据,用心区域网内 不同系统间的请求调用 依赖 httpclient.jar和httpcore.jar需要同时纯在 <dependency ...
- Binary Stirling Numbers
http://poj.org/problem?id=1430 题目: 求 第二类 斯特林数 的 奇偶性 即 求 s2 ( n , m ) % 2 : 题解: https://blog.csdn.ne ...
- Codeforces 1054D Changing Array 贪心+异或和
题意 给一个长度为\(n\)的位数为\(k\)的整数数列\(a\),一次操作可将任意\(a_i\)取反,问经过任意次操作后最多有多少个区间异或和不为\(0\) 分析 求出前缀异或和,区间异或和为\(0 ...
- js保留二位小数
js保留小数常用有三种方法,可根据实际情况选择 方法一:使用toFixed保留两位小数 自带四舍五入与补位 var num1 = 55.3715; console.log(num1.toFixed(2 ...