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代码调试的几种方法总结
Apr 15 Python
Python基于smtplib实现异步发送邮件服务
May 28 Python
简单谈谈python中的Queue与多进程
Aug 25 Python
Selenium的使用详解
Oct 19 Python
Python中修改字符串的四种方法
Nov 02 Python
pytorch GAN生成对抗网络实例
Jan 10 Python
将pycharm配置为matlab或者spyder的用法说明
Jun 08 Python
深入了解Python enumerate和zip
Jul 16 Python
Python os库常用操作代码汇总
Nov 03 Python
python实现定时发送邮件
Dec 23 Python
微软开源最强Python自动化神器Playwright(不用写一行代码)
Jan 05 Python
Matplotlib animation模块实现动态图
Feb 25 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
文件系统基本操作类
2006/11/23 PHP
php !function_exists("T7FC56270E7A70FA81A5935B72EACBE29"))代码解密
2011/01/07 PHP
探讨多键值cookie(php中cookie存取数组)的详解
2013/06/06 PHP
mac下Apache + MySql + PHP搭建网站开发环境
2014/06/02 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
Laravel中如何增加自定义全局函数详解
2017/05/09 PHP
php简单计算权重的方法示例【适合抽奖类应用】
2019/06/10 PHP
XML+XSL 与 HTML 两种方案的结合
2007/04/22 Javascript
20款非常优秀的 jQuery 工具提示插件 推荐
2012/07/15 Javascript
javascript 数组操作详解
2015/01/29 Javascript
浅谈JavaScript中运算符的优先级
2015/07/07 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
BootStrap下拉框在firefox浏览器界面不友好的解决方案
2016/08/18 Javascript
Input文本框随着输入内容多少自动延伸的实现
2017/02/15 Javascript
Angularjs的$http异步删除数据详解及实例
2017/07/27 Javascript
了解JavaScript表单操作和表单域
2019/05/27 Javascript
vue.js中ref和$refs的使用及示例讲解
2019/08/14 Javascript
JS FormData对象使用方法实例详解
2020/02/12 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
解决VUE-Router 同一页面第二次进入不刷新的问题
2020/07/22 Javascript
Python 解析XML文件
2009/04/15 Python
Python处理XML格式数据的方法详解
2017/03/21 Python
使用python在本地电脑上快速处理数据
2017/06/22 Python
Python对excel文档的操作方法详解
2018/12/10 Python
解决pyCharm中 module 调用失败的问题
2020/02/12 Python
python使用turtle库绘制奥运五环
2020/02/24 Python
pandas 像SQL一样使用WHERE IN查询条件说明
2020/06/05 Python
使用豆瓣源来安装python中的第三方库方法
2021/01/26 Python
庆祝教师节活动方案
2014/01/31 职场文书
作文批改评语大全
2014/04/23 职场文书
仓库管理计划书
2014/05/04 职场文书
学生自我鉴定格式及范文
2014/09/16 职场文书
博士给导师的自荐信
2015/03/06 职场文书
2015年教师工作总结范文
2015/03/31 职场文书
保护环境的宣传语
2015/07/13 职场文书
关于HTML编码导致的乱码问题
2021/09/04 HTML / CSS