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 相关文章推荐
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python中的格式化输出用法总结
Jul 28 Python
python负载均衡的简单实现方法
Feb 04 Python
python实现两个文件合并功能
Apr 01 Python
PyTorch快速搭建神经网络及其保存提取方法详解
Apr 28 Python
解决python中无法自动补全代码的问题
Dec 04 Python
对numpy下的轴交换transpose和swapaxes的示例解读
Jun 26 Python
python3.7 使用pymssql往sqlserver插入数据的方法
Jul 08 Python
如何基于Python实现自动扫雷
Jan 06 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
Apr 07 Python
python上下文管理器异常问题解决方法
Feb 07 Python
Python3压缩和解压缩实现代码
Mar 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
一步一步学习PHP(8) php 数组
2010/03/05 PHP
浅谈PHP与C#的值类型指向区别的详解
2013/05/21 PHP
PHP模块memcached使用指南
2014/12/08 PHP
PHP+apc+ajax实现的ajax_upload上传进度条代码
2016/01/25 PHP
Yii2前后台分离及migrate使用(七)
2016/05/04 PHP
innerText 使用示例
2014/01/23 Javascript
JS清空多文本框、文本域示例代码
2014/02/24 Javascript
JavaScript、jQuery与Ajax的关系
2016/01/24 Javascript
JS实现图片的不间断连续滚动的简单实例
2016/06/03 Javascript
node.js 中国天气预报 简单实现
2016/06/06 Javascript
js HTML5 Canvas绘制转盘抽奖
2020/09/13 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
jQuery插件HighCharts绘制的基本折线图效果示例【附demo源码下载】
2017/03/07 Javascript
VueJS组件之间通过props交互及验证的方式
2017/09/04 Javascript
详解Vue2 SSR 缓存 Api 数据
2017/11/20 Javascript
Vue.js子组件向父组件通信的方法实例代码详解
2018/12/10 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
JS实现动态添加外部js、css到head标签的方法
2019/06/05 Javascript
解决layui中onchange失效以及form动态渲染失效的问题
2019/09/27 Javascript
浅谈Vue 自动化部署打包上线
2020/06/14 Javascript
[52:29]DOTA2上海特级锦标赛主赛事日 - 2 胜者组第一轮#3Secret VS OG第三局
2016/03/03 DOTA
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
python调用cmd复制文件代码分享
2013/12/27 Python
Python编写检测数据库SA用户的方法
2014/07/11 Python
Python3基础之基本运算符概述
2014/08/13 Python
pygame学习笔记(4):声音控制
2015/04/15 Python
python2.7到3.x迁移指南
2018/02/01 Python
对python requests发送json格式数据的实例详解
2018/12/19 Python
纯css3实现宠物小鸡实例代码
2018/10/08 HTML / CSS
宿舍保安职务说明书
2014/02/25 职场文书
高一学生期末评语
2014/04/25 职场文书
会计求职信
2014/05/29 职场文书
推普周活动总结
2014/08/28 职场文书
黄河绝恋观后感
2015/06/08 职场文书
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
js基于div丝滑实现贝塞尔曲线
2022/09/23 Javascript