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 迭代器工具包【推荐】
May 06 Python
Python打印“菱形”星号代码方法
Feb 05 Python
用TensorFlow实现多类支持向量机的示例代码
Apr 28 Python
python如何生成网页验证码
Jul 28 Python
Selenium定位元素操作示例
Aug 10 Python
详解Python3之数据指纹MD5校验与对比
Jun 11 Python
大家都说好用的Python命令行库click的使用
Nov 07 Python
Python3加密解密库Crypto的RSA加解密和签名/验签实现方法实例
Feb 11 Python
Django media static外部访问Django中的图片设置教程
Apr 07 Python
Python常用数字处理基本操作汇总
Sep 10 Python
scrapy-splash简单使用详解
Feb 21 Python
Python内置类型集合set和frozenset的使用详解
Apr 26 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
打造计数器DIY三步曲(中)
2006/10/09 PHP
Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
2016/03/07 PHP
Zend Framework教程之资源(Resources)用法实例详解
2016/03/14 PHP
php+mysql+ajax实现单表多字段多关键词查询的方法
2017/04/15 PHP
JS是否可以跨文件同时控制多个iframe页面的应用技巧
2007/12/16 Javascript
Date对象格式化函数代码
2010/07/17 Javascript
Javascript的并行运算实现代码
2010/11/19 Javascript
JS打开图片另存为对话框实现代码
2012/12/26 Javascript
关于JavaScript中的关联数组分析
2013/04/09 Javascript
用javascript替换URL中的参数值示例代码
2014/01/27 Javascript
JavaScript 学习笔记之语句
2015/01/14 Javascript
javascript实用方法总结
2015/02/06 Javascript
jquery插件validation实现验证身份证号等
2015/06/04 Javascript
javascript将DOM节点添加到文档的方法实例分析
2015/08/04 Javascript
jQuery+canvas实现的球体平抛及颜色动态变换效果
2016/01/28 Javascript
JS之相等操作符详解
2016/09/13 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
2017/04/25 Javascript
nodejs简单实现TCP服务器端和客户端的聊天功能示例
2018/01/04 NodeJs
vue-router 源码实现前端路由的两种方式
2018/07/02 Javascript
一文看懂如何简单实现节流函数和防抖函数
2019/09/05 Javascript
vue中动态select的使用方法示例
2019/10/28 Javascript
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
python在Windows8下获取本机ip地址的方法
2015/03/14 Python
基于django ManyToMany 使用的注意事项详解
2019/08/09 Python
浅谈图像处理中掩膜(mask)的意义
2020/02/19 Python
Django使用Celery加redis执行异步任务的实例内容
2020/02/20 Python
Python argparse模块使用方法解析
2020/02/20 Python
Python 爬虫的原理
2020/07/30 Python
环保标语口号
2014/06/13 职场文书
新学期开学标语
2014/06/30 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
党的群众路线教育实践活动个人整改措施范文
2014/11/04 职场文书
优秀员工事迹材料
2014/12/20 职场文书
《火烧云》教学反思
2016/02/23 职场文书
分享3个非常实用的 Python 模块
2022/03/03 Python
Python实现视频自动打码的示例代码
2022/04/08 Python