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的Django框架中的select_related函数对QuerySet 查询的优化
Apr 01 Python
网红编程语言Python将纳入高考你怎么看?
Jun 07 Python
python射线法判断一个点在图形区域内外
Jun 28 Python
Python使用sklearn实现的各种回归算法示例
Jul 04 Python
Python中拆分字符串的操作方法
Jul 23 Python
pandas如何处理缺失值
Jul 31 Python
Python Opencv提取图片中某种颜色组成的图形的方法
Sep 19 Python
python 日志 logging模块详细解析
Mar 31 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
May 26 Python
Python Dataframe常见索引方式详解
May 27 Python
python根据用户需求输入想爬取的内容及页数爬取图片方法详解
Aug 03 Python
Django实现翻页的示例代码
May 24 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 setTime 设置当前时间的代码
2012/08/27 PHP
解析thinkphp import 文件内容变量失效的问题
2013/06/20 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
PHP获取音频文件的相关信息
2015/06/22 PHP
php+ajax实现无刷新的新闻留言系统
2020/12/21 PHP
laravel5创建service provider和facade的方法详解
2016/07/26 PHP
Yii框架表单提交验证功能分析
2017/01/07 PHP
ThinkPHP下表单令牌错误与解决方法分析
2017/05/20 PHP
Javascript-Mozilla和IE中的一个函数直接量的问题
2007/01/09 Javascript
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
js jquery获取随机生成id的服务器控件的三种方法
2013/07/11 Javascript
Jquery动态更改一张位图的src与Attr的使用
2013/07/31 Javascript
jquery eval解析JSON中的注意点介绍
2013/08/23 Javascript
js实现带关闭按钮始终显示在网页最底部工具条的方法
2015/03/02 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
Bootstrap Table服务器分页与在线编辑应用总结
2016/08/08 Javascript
Bootstrap 3浏览器兼容性问题及解决方案
2017/04/11 Javascript
动态统计当前输入内容的字节、字符数的实例详解
2017/10/27 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
JS立即执行函数功能与用法分析
2019/01/15 Javascript
javascript设计模式 ? 外观模式原理与用法实例分析
2020/04/15 Javascript
在vue中封装的弹窗组件使用队列模式实现方法
2020/07/23 Javascript
[01:38]【DOTA2亚洲邀请赛】Sumail——梦开始的地方
2017/03/03 DOTA
Python 实现 贪吃蛇大作战 代码分享
2016/09/07 Python
一个基于flask的web应用诞生(1)
2017/04/11 Python
Python获取当前页面内所有链接的四种方法对比分析
2017/08/19 Python
在python中使用requests 模拟浏览器发送请求数据的方法
2018/12/26 Python
如何在Win10系统使用Python3连接Hive
2020/10/15 Python
Python 利用flask搭建一个共享服务器的步骤
2020/12/05 Python
Perry Ellis官网:美国男士品味服装
2016/12/09 全球购物
在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern "C"
2014/08/09 面试题
Javascript如何发送一个Ajax请求
2015/01/26 面试题
单位创先争优活动方案
2014/01/26 职场文书
上班迟到检讨书
2014/09/15 职场文书
爱心助学感谢信
2015/01/21 职场文书
Redis监控工具RedisInsight安装与使用
2022/03/21 Redis