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应用程序步骤及版本冲突问题解决
Nov 19 Python
Python 处理数据的实例详解
Aug 10 Python
使用Eclipse如何开发python脚本
Apr 11 Python
基于python指定包的安装路径方法
Oct 27 Python
Ubuntu下Anaconda和Pycharm配置方法详解
Jun 14 Python
Python进程的通信Queue、Pipe实例分析
Mar 30 Python
Python的in,is和id函数代码实例
Apr 18 Python
Python使用pdb调试代码的技巧
May 03 Python
python获得命令行输入的参数的两种方式
Nov 02 Python
python spilt()分隔字符串的实现示例
May 21 Python
一行Python命令实现批量加水印
Apr 07 Python
Python测试框架pytest高阶用法全面详解
Jun 01 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
德生S2000南麂列岛台湾FM收听记录
2021/03/02 无线电
php 文件上传实例代码
2012/04/19 PHP
ubuntu12.04使用c编写php扩展模块教程分享
2013/12/25 PHP
php判断电脑访问、手机访问的例子
2014/05/10 PHP
PHP实现生成透明背景的PNG缩略图函数分享
2014/07/08 PHP
php+ajax实现无刷新分页的方法
2014/11/04 PHP
静态页面下用javascript操作ACCESS数据库(读增改删)的代码
2007/05/14 Javascript
Js 随机数产生6位数字
2010/05/13 Javascript
JavaScript中:表达式和语句的区别[译]
2012/09/17 Javascript
为什么Node.js会这么火呢?Node.js流行的原因
2014/12/01 Javascript
javascript实现确定和取消提示框效果
2015/07/10 Javascript
JavaScript字符集编码与解码详谈
2017/02/02 Javascript
jQuery实现的简单获取索引功能示例
2018/06/04 jQuery
JavaScript实现预览本地上传图片功能完整示例
2019/03/08 Javascript
详解服务端预渲染之Nuxt(介绍篇)
2019/04/07 Javascript
跟老齐学Python之私有函数和专有方法
2014/10/24 Python
深入理解python函数递归和生成器
2016/06/06 Python
json跨域调用python的方法详解
2017/01/11 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
python判断列表的连续数字范围并分块的方法
2018/11/16 Python
python实现维吉尼亚算法
2019/03/20 Python
python实现给微信指定好友定时发送消息
2019/04/29 Python
python线程的几种创建方式详解
2019/08/29 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Python通过TensorFLow进行线性模型训练原理与实现方法详解
2020/01/15 Python
Python多线程实现支付模拟请求过程解析
2020/04/21 Python
HTTP状态码详解
2021/03/18 杂记
css3实现一款模仿iphone样式的注册表单
2013/03/20 HTML / CSS
英国家喻户晓的高街品牌:River Island
2017/11/28 全球购物
毕业生就业自荐书
2013/12/15 职场文书
2014年统战工作总结
2014/12/09 职场文书
学校食堂管理制度
2015/08/04 职场文书
评估“风险”创业计划的几大要点
2019/08/12 职场文书
MySQL Shell的介绍以及安装
2021/04/24 MySQL
MySQL数据库如何使用Shell进行连接
2022/04/12 MySQL
tomcat默认最大连接数及相关调整方法
2022/05/06 Servers