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():
print (d)
>>>
defaultdict(, {'a': [[22, 44]], 'b': [[88]]})
>>>
相关文章
- 【Python成长之路】Python爬虫 --requests库爬取网站乱码(xe4xb8xb0xe5xa)的解决方法【华为云分享】
- Linux端BaiduPCS-Go使用方法
- 【原】iphone6来了,我该做点什么(兼容iphone6的方法)
- 1.ES5 与 ES6 遍历数组的不同方法
- 海量数据处理方法总结
- 朴素贝叶斯算法的python实现方法
- Service Intent must be explicit的解决方法
- 【论文复现】——利用特征点采样一致性改进ICP算法点云配准方法
- 错误““NameSpace.Test_Index.Dispose(bool)”: 没有找到适合的方法来重写
- Atitit 数据库 负载均衡 方法总结 目录 1. 对称模型负载均衡 vs 非对称模型2 1.1. 业务分离法2 1.2. App + db分布式分离法2 2. 负载均衡算法2 2.1.
- Atitit 数据库 负载均衡 方法总结 目录 1. 对称模型负载均衡 vs 非对称模型2 1.1. 业务分离法2 1.2. App + db分布式分离法2 2. 负载均衡算法2 2.1.
- Rockchip Android平台GPU/DDR负载变频阈值调整方法
- CV:人工智能之计算机视觉方向的简介(CV发展史+传统方法对比CNN类算法+CV类会议/期刊、主要研究方向)、计算机视觉四大研究方向以及十大具体应用领域(知识导图+经典案例)之详细攻略
- ML之回归预测之BE:利用BE算法解决回归(实数值评分预测)问题—线性方法解决非线性问题
- ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估)
- DL:神经网络算法简介之Affine 层的简介、使用方法、代码实现之详细攻略
- Py之pyaudio:Python库之pyaudio简介、安装、使用方法之详细攻略
- Py之sip:Python库之sip的简介、安装、使用方法之详细攻略
- 【故障定位】基于多元宇宙算法的主动配电网故障定位方法研究(Matlab代码实现)
- 必知必会,这4种算法超参自动优化方法真香啊
- 如何一键重装Win7系统 Win7系统重装的方法教程
- DataTable转换List<T>集合的方法
- 工厂方法模式