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如何为图片添加水印
Nov 25 Python
Python简单实现控制电脑的方法
Jan 22 Python
Python模块的加载讲解
Jan 15 Python
python实现桌面壁纸切换功能
Jan 21 Python
python查询文件夹下excel的sheet名代码实例
Apr 02 Python
Python中psutil的介绍与用法
May 02 Python
python3.6使用tkinter实现弹跳小球游戏
May 09 Python
pytorch 归一化与反归一化实例
Dec 31 Python
如何基于python实现归一化处理
Jan 20 Python
Python生成随机验证码代码实例解析
Jun 09 Python
Django如何与Ajax交互
Apr 29 Python
Python语法学习之进程的创建与常用方法详解
Apr 08 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 db类库进行数据库操作
2009/03/19 PHP
php实现加减法验证码代码
2014/02/14 PHP
javascript中巧用“闭包”实现程序的暂停执行功能
2007/04/04 Javascript
innertext , insertadjacentelement , insertadjacenthtml , insertadjacenttext 等区别
2007/06/29 Javascript
js面向对象 多种创建对象方法小结
2012/05/21 Javascript
Javascript实现获取窗口的大小和位置代码分享
2014/12/04 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
JavaScript使用Replace进行字符串替换的方法
2015/04/14 Javascript
Ajax清除浏览器js、css、图片缓存的方法
2015/08/06 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
纯JavaScript基于notie.js插件实现消息提示特效
2016/01/18 Javascript
jQuery实现的多滑动门,多选项卡效果代码
2016/03/28 Javascript
Vuejs第十篇之vuejs父子组件通信
2016/09/06 Javascript
JS+HTML+CSS实现轮播效果
2017/11/28 Javascript
AngularJS与BootStrap模仿百度分页的示例代码
2018/05/23 Javascript
jQuery zTree插件使用简单教程
2019/08/16 jQuery
Layui实现数据表格中鼠标悬浮图片放大效果,离开时恢复原图的方法
2019/09/11 Javascript
使用vuex存储用户信息到localStorage的实例
2019/11/11 Javascript
jQuery实现带进度条的轮播图
2020/09/13 jQuery
[01:23:24]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第三场 2月7日
2021/03/11 DOTA
使用Python如何测试InnoDB与MyISAM的读写性能
2018/09/18 Python
Python3 安装PyQt5及exe打包图文教程
2019/01/08 Python
对Python生成汉字字库文字,以及转换为文字图片的实例详解
2019/01/29 Python
实例讲解Python3中abs()函数
2019/02/19 Python
Windows10下 python3.7 安装 facenet的教程
2019/09/10 Python
使用IPython或Spyder将省略号表示的内容完整输出
2020/04/20 Python
python3 sleep 延时秒 毫秒实例
2020/05/04 Python
pytorch VGG11识别cifar10数据集(训练+预测单张输入图片操作)
2020/06/24 Python
浅析Python面向对象编程
2020/07/10 Python
Django如何继承AbstractUser扩展字段
2020/11/27 Python
eHarmony英国:全球领先的认真恋爱约会平台之一
2020/11/16 全球购物
static函数与普通函数有什么区别
2015/12/25 面试题
开会迟到检讨书
2014/02/03 职场文书
家长会标语
2014/06/24 职场文书
教师师德工作总结2015
2015/07/22 职场文书
Python中快速掌握Data Frame的常用操作
2021/03/31 Python