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中的With语句
Feb 02 Python
浅析Python中将单词首字母大写的capitalize()方法
May 18 Python
python实现JAVA源代码从ANSI到UTF-8的批量转换方法
Aug 10 Python
基于Python Shell获取hostname和fqdn释疑
Jan 25 Python
Python获取文件所在目录和文件名的方法
Jan 12 Python
Pycharm设置界面全黑的方法
May 23 Python
python 脚本生成随机 字母 + 数字密码功能
May 26 Python
Python中分支语句与循环语句实例详解
Sep 13 Python
python实现淘宝秒杀脚本
Jun 23 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
Jun 21 Python
tensorflow之并行读入数据详解
Feb 05 Python
Python之字符串的遍历的4种方式
Dec 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+MYSQL的文章管理系统(二)
2006/10/09 PHP
Thinkphp多文件上传实现方法
2014/10/31 PHP
/etc/php-fpm.d/www.conf 配置注意事项
2017/02/04 PHP
BOOM vs RR BO5 第四场 2.14
2021/03/10 DOTA
jquery 操作单选框,复选框,下拉列表实现代码
2009/10/27 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
自己动手制作jquery插件之自动添加删除行功能介绍
2011/10/14 Javascript
关于 文本框默认值 的操作js代码
2012/01/12 Javascript
JavaScript获取onclick、onchange等事件值的代码
2013/07/22 Javascript
js动态切换图片的方法
2015/01/20 Javascript
JavaScript和JQuery的鼠标mouse事件冒泡处理
2015/06/19 Javascript
Javascript原型链的原理详解
2016/01/05 Javascript
javascript跑马灯抽奖实例讲解
2020/04/17 Javascript
Bootstrap3学习笔记(二)之排版
2016/05/20 Javascript
JS实现的点击表头排序功能示例
2017/03/27 Javascript
用Vue.extend构建消息提示组件的方法实例
2017/08/08 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
Vue-Router进阶之滚动行为详解
2017/09/13 Javascript
JavaScript中window和document用法详解
2020/07/28 Javascript
Vue-cli4 配置 element-ui 按需引入操作
2020/09/11 Javascript
[02:24]DOTA2痛苦女王 英雄基础教程
2013/11/26 DOTA
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
[02:42]DOTA2城市挑战赛收官在即 四强之争风起云涌
2018/06/05 DOTA
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
tensorflow 重置/清除计算图的实现
2020/01/19 Python
Python模块 _winreg操作注册表
2020/02/05 Python
python GUI库图形界面开发之PyQt5控件数据拖曳Drag与Drop详细使用方法与实例
2020/02/27 Python
Python celery原理及运行流程解析
2020/06/13 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
Marriott中国:万豪国际酒店查询预订
2016/09/02 全球购物
什么是servlet链?
2014/07/13 面试题
生产车间主任的个人自我鉴定
2013/10/25 职场文书
公开承诺书格式
2014/05/21 职场文书
商务英语专业求职信
2014/06/26 职场文书
党员领导干部民主生活会批评与自我批评发言
2014/09/28 职场文书
恋恋笔记本观后感
2015/06/16 职场文书