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 执行字符串表达式函数(eval exec execfile)
Aug 11 Python
在Python中使用sort()方法进行排序的简单教程
May 21 Python
python matplotlib坐标轴设置的方法
Dec 05 Python
Python实现PS滤镜的旋转模糊功能示例
Jan 20 Python
python使用PIL实现多张图片垂直合并
Jan 15 Python
Python3 requests文件下载 期间显示文件信息和下载进度代码实例
Aug 16 Python
python词云库wordcloud的使用方法与实例详解
Feb 17 Python
Spring Boot中使用IntelliJ IDEA插件EasyCode一键生成代码详细方法
Mar 20 Python
在python中对于bool布尔值的取反操作
Dec 11 Python
用Python写一个简易版弹球游戏
Apr 13 Python
Python包管理工具pip的15 个使用小技巧
May 17 Python
Python帮你解决手机qq微信内存占用太多问题
Feb 15 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字符串 ==比较运算符的副作用
2009/10/21 PHP
一道关于php变量引用的面试题
2010/08/08 PHP
优化PHP代码技巧的小结
2013/06/02 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
php实现文件管理与基础功能操作
2017/03/21 PHP
PHP实现的各类hash算法长度及性能测试实例
2017/08/27 PHP
详解PHP多个进程配合redis的有序集合实现大文件去重
2019/03/06 PHP
Thinkphp自定义生成缩略图尺寸的方法
2019/08/05 PHP
JS的递增/递减运算符和带操作的赋值运算符的等价式
2007/12/08 Javascript
刷新页面实现方式总结(HTML,ASP,JS)
2008/11/13 Javascript
Angular的事件和表单详解
2016/12/26 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
Vue2.0实现1.0的搜索过滤器功能实例代码
2017/03/20 Javascript
Node.js中的require.resolve方法使用简介
2017/04/23 Javascript
js学习总结_轮播图之渐隐渐现版(实例讲解)
2017/07/17 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
js时间戳与日期格式之间转换详解
2017/12/11 Javascript
vue2.0实现前端星星评分功能组件实例代码
2018/02/12 Javascript
JS获取url参数,JS发送json格式的POST请求方法
2018/03/29 Javascript
vue实现手机号码的校验实例代码(防抖函数的应用场景)
2019/09/05 Javascript
详解React 条件渲染
2020/07/08 Javascript
Vue 3自定义指令开发的相关总结
2021/01/29 Vue.js
实例Python处理XML文件的方法
2015/08/31 Python
Python中列表list以及list与数组array的相互转换实现方法
2017/09/22 Python
Python语言实现将图片转化为html页面
2017/12/06 Python
Python实现邮件的批量发送的示例代码
2018/01/23 Python
PyQT5 QTableView显示绑定数据的实例详解
2019/06/25 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
英国最大的在线床超市:Bed Star
2019/01/24 全球购物
石油大学毕业生自荐信
2014/01/28 职场文书
《与象共舞》教学反思
2014/02/24 职场文书
2014年精神文明建设工作总结
2014/11/19 职场文书
车间主任岗位职责
2015/02/03 职场文书
2016年寒假社会实践活动总结
2015/10/10 职场文书
浅谈Python类的单继承相关知识
2021/05/12 Python
nginx搭建NFS网络文件系统
2022/04/14 Servers