Python创建空列表的字典2种方法详解


Posted in Python onFebruary 13, 2020

如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因。本文针对两种方法做了实验和分析。

如果要在 Python 中创建一个键值都是列表的字典,类似下面这样,该怎么做?

{1:[], 2:[], 3:[], 4:[]}

方法1,字典构造器

用 dict 构造器生成,构造(key,value)对

> key = [1, 2, 3, 4]
> a = dict([(k,[]) for k in key])
> a
{1: [], 2: [], 3: [], 4: []}

方法2,使用 fromkeys()

用字典的方法fromkeys(key list, default value)

> key = [1, 2, 3, 4]
> b = {}.fromkeys(key,[])
> b
{1: [], 2: [], 3: [], 4: []}

结果对比

这两种方法生成的字典有没有区别?检验一下:

> a[1].append(1)
> a
{1: [1], 2: [], 3: [], 4: []} # 仅影响对应的键值列表
>
> b[1].append(1)
> b
{1: [1], 2: [1], 3: [1], 4: [1]} # 所有键值列表都受影响

上面的结果中,发现使用 fromkeys() 方法生成的空列表,都增加了一个元素。似乎他们是同一个对象。

原因分析

从上面看出,用fromkeys( )方法生成的字典里的空列表其实是同一个对象。为什么会这样?因为传给fromkeys( )函数的参数”[]“是同一个对象,fromkeys( )把这一个对象的浅拷贝放在字典里了。

Python创建空列表的字典2种方法详解

如果这个对象是 mutable 的,就会在后续的操作中出问题。如果创建字典的对象是mutable的,应该避免使用fromkeys( )

更多关于Python创建空列表的字典方法请查看下面的相关链接

Python 相关文章推荐
python的re模块应用实例
Sep 26 Python
Python处理Excel文件实例代码
Jun 20 Python
python模仿网页版微信发送消息功能
Feb 24 Python
Python装饰器语法糖
Jan 02 Python
Python3爬虫全国地址信息
Jan 05 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
Aug 20 Python
Django多进程滚动日志问题解决方案
Dec 17 Python
快速查找Python安装路径方法
Feb 06 Python
python利用百度云接口实现车牌识别的示例
Feb 21 Python
Python魔术方法专题
Jun 19 Python
matplotlib图例legend语法及设置的方法
Jul 28 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 Python
python-docx文件定位读取过程(尝试替换)
Feb 13 #Python
Python 实现向word(docx)中输出
Feb 13 #Python
Python如何把多个PDF文件合并代码实例
Feb 13 #Python
python读取csv文件指定行的2种方法详解
Feb 13 #Python
Python类中self参数用法详解
Feb 13 #Python
python字符串下标与切片及使用方法
Feb 13 #Python
python时间与Unix时间戳相互转换方法详解
Feb 13 #Python
You might like
php字符串截取中文截取2,单字节截取模式
2007/12/10 PHP
PHP编实现程动态图像的创建代码
2008/09/28 PHP
PHP响应post请求上传文件的方法
2015/12/17 PHP
TP(thinkPHP)框架多层控制器和多级控制器的使用示例
2018/06/13 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
PHP PDOStatement::nextRowset讲解
2019/02/01 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
js/jQuery简单实现选项卡功能
2014/01/02 Javascript
js操作输入框中选择内容兼容IE及其他主流浏览器
2014/04/22 Javascript
如何编写高质量JS代码
2014/12/28 Javascript
JavaScript阻止浏览器返回按钮的方法
2015/03/18 Javascript
JavaScript实现相册弹窗功能(zepto.js)
2016/06/21 Javascript
JS判断微信扫码的方法
2017/08/07 Javascript
[jQuery] 事件和动画详解
2019/03/05 jQuery
Node.js API详解之 readline模块用法详解
2020/05/22 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
如何利用JavaScript编写一个格斗小游戏
2021/01/06 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
Python实现简单状态框架的方法
2015/03/19 Python
详解Python的Django框架中manage命令的使用与扩展
2016/04/11 Python
python实现连续图文识别
2018/12/18 Python
pandas修改DataFrame列名的实现方法
2019/02/22 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
2019/07/01 Python
Python 使用folium绘制leaflet地图的实现方法
2019/07/05 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
python 字符串的驻留机制及优缺点
2020/06/19 Python
详解移动端HTML5音频与视频问题及解决方案
2018/08/22 HTML / CSS
HTML5实现直播间评论滚动效果的代码
2020/05/27 HTML / CSS
澳大利亚波希米亚风时尚品牌:Tree of Life
2019/09/15 全球购物
实习教师个人的自我评价
2013/11/08 职场文书
法人委托书的范本格式
2014/09/11 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
12.4全国法制宣传日活动方案
2014/11/02 职场文书
MySQL如何使用使用Xtrabackup进行备份和恢复
2021/06/21 MySQL
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技