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读取word文档的方法
May 09 Python
Python语言实现机器学习的K-近邻算法
Jun 11 Python
Python+Django搭建自己的blog网站
Mar 13 Python
Python数据持久化shelve模块用法分析
Jun 29 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
对python mayavi三维绘图的实现详解
Jan 08 Python
基于python-pptx库中文文档及使用详解
Feb 14 Python
python对数组进行排序,并输出排序后对应的索引值方式
Feb 28 Python
如何把python项目部署到linux服务器
Aug 26 Python
Python+Selenium随机生成手机验证码并检查页面上是否弹出重复手机号码提示框
Sep 21 Python
如何使用Pytorch搭建模型
Oct 26 Python
python实现网页录音效果
Oct 26 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强制转换类型及远程管理插件的安全隐患
2014/06/30 PHP
php实现简易聊天室应用代码
2015/09/23 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
addRule在firefox下的兼容写法
2006/11/30 Javascript
fckeditor 获取文本框值的实现代码
2009/02/09 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
JS获取当前日期和时间的简单实例
2013/11/19 Javascript
jQuery制作简洁的图片轮播效果
2015/04/03 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
bootstrap Table的一些小操作
2017/11/01 Javascript
基于Vuejs的搜索匹配功能实现方法
2018/03/03 Javascript
Vue中使用vue-i18插件实现多语言切换功能
2018/04/25 Javascript
微信小程序实现两边小中间大的轮播效果的示例代码
2018/12/07 Javascript
使用 vue 实现灭霸打响指英雄消失的效果附demo
2019/05/06 Javascript
在Vue中使用this.$store或者是$route一直报错的解决
2019/11/08 Javascript
Vue触发input选取文件点击事件操作
2020/08/07 Javascript
黑科技 Python脚本帮你找出微信上删除你好友的人
2016/01/07 Python
Pycharm学习教程(1) 定制外观
2017/05/02 Python
python消费kafka数据批量插入到es的方法
2018/12/27 Python
Python 存储字符串时节省空间的方法
2019/04/23 Python
python安装requests库的实例代码
2019/06/25 Python
pygame实现俄罗斯方块游戏(AI篇1)
2019/10/29 Python
PyQt5 如何让界面和逻辑分离的方法
2020/03/24 Python
HTML5计时器小例子
2013/10/15 HTML / CSS
HTML5标签使用方法详解
2015/11/27 HTML / CSS
一站式跨境收款解决方案:Payoneer(派安盈)
2018/09/06 全球购物
六一儿童节演讲稿
2014/05/23 职场文书
“四风”查摆问题自我剖析材料
2014/09/27 职场文书
个人授权委托书范本格式
2014/10/12 职场文书
上课说话检讨书500字
2014/11/01 职场文书
2014年乡镇团委工作总结
2014/12/18 职场文书
文明家庭事迹材料
2014/12/20 职场文书
酒店员工辞职信范文
2015/02/28 职场文书
同意报考证明
2015/06/17 职场文书
幼儿园春季开学通知
2015/07/16 职场文书
SpringBoot整合RabbitMQ的5种模式实战
2021/08/02 Java/Android