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代码
Mar 13 Python
python基础教程之循环介绍
Aug 29 Python
用Python编写一个每天都在系统下新建一个文件夹的脚本
May 04 Python
Perl中著名的Schwartzian转换问题解决实现
Jun 02 Python
Python中Class类用法实例分析
Nov 12 Python
图文讲解选择排序算法的原理及在Python中的实现
May 04 Python
Python使用pydub库对mp3与wav格式进行互转的方法
Jan 10 Python
python+opencv实现移动侦测(帧差法)
Mar 20 Python
python两个list[]相加的实现方法
Sep 23 Python
python批量生成条形码的示例
Oct 10 Python
Python实现壁纸下载与轮换
Oct 19 Python
超详细Python解释器新手安装教程
May 10 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扩展编写点滴 技巧收集
2010/03/09 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
ThinkPHP调用common/common.php函数提示错误function undefined的解决方法
2014/08/25 PHP
PHP数组和explode函数示例总结
2015/05/08 PHP
浅谈PHP的数据库接口和技术
2016/12/09 PHP
Laravel框架实现redis集群的方法分析
2017/09/14 PHP
PHP时间处理类操作示例
2018/09/05 PHP
PHP中命名空间的使用例子
2019/03/22 PHP
用Javascript读取中文COOKIE的解决办法
2007/02/15 Javascript
js过滤数组重复元素的方法
2010/09/05 Javascript
jquery ajax同步异步的执行最终解决方案
2013/04/26 Javascript
flash遮住div问题的正确解决方法
2014/02/27 Javascript
你可能不知道的JavaScript的new Function()方法
2014/04/17 Javascript
jQuery实现的原图对比窗帘效果
2014/06/15 Javascript
jQuery如何获取同一个类标签的所有值(默认无法获取)
2014/09/25 Javascript
Jquery Mobile 自定义按钮图标
2015/11/18 Javascript
jQuery实现横向带缓冲的水平运动效果(附demo源码下载)
2016/01/29 Javascript
jquery操作checkbox火狐下第二次无法勾选的解决方法
2016/10/10 Javascript
基于jQuery代码实现圆形菜单展开收缩效果
2017/02/13 Javascript
解决bootstrap下拉菜单点击立即隐藏bug的方法
2017/06/13 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
JavaScript 完成注册页面表单校验的实例
2017/08/19 Javascript
JavaScript定义函数的三种实现方法
2017/09/23 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
2017/12/22 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
Python设计模式之观察者模式原理与用法详解
2019/01/16 Python
Python为何不能用可变对象作为默认参数的值
2019/07/01 Python
在pytorch中查看可训练参数的例子
2019/08/18 Python
Python中turtle库的使用实例
2019/09/09 Python
python mysql中in参数化说明
2020/06/05 Python
关于Python3的import问题(pycharm可以运行命令行import错误)
2020/11/18 Python
基于html和CSS3制作酷炫的导航栏
2015/09/23 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
新闻专业推荐信范文
2013/11/20 职场文书
工作个人的自我评价
2014/01/14 职场文书
部门2014年度工作总结
2014/11/12 职场文书