如果要在 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( )把这一个对象的浅拷贝放在字典里了。

如果这个对象是 mutable 的,就会在后续的操作中出问题。如果创建字典的对象是mutable的,应该避免使用fromkeys( )

更多关于Python创建空列表的字典方法请查看下面的相关链接

python中如何创建一个空列表_Python创建空列表的字典2种方法详解相关推荐

  1. python创建空字典什么意思_Python创建空列表的字典2种方法详解

    如果要在 Python 中创建键值是空列表的字典,有多种方法,但是各种方法之间是否由区别?需要作实验验证,并且分析产生的原因.本文针对两种方法做了实验和分析. 如果要在 Python 中创建一个键值都 ...

  2. python中哪些词是敏感字词_python实现敏感词过滤的几种方法

    1.replace过滤 最简单也是最直接的就是直接循环敏感词,然后使用replace过滤关键词,文章和敏感词少的时候还可以,多的时候效率就真的很一般了. 2.使用正则过滤 有两个技术要点, 1.使用P ...

  3. python复制列表元素_Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解...

    Python学习教程:Python列表赋值,复制,深拷贝及5种浅拷贝详解 概述 在列表复制这个问题,看似简单的复制却有着许多的学问,尤其是对新手来说,理所当然的事情却并不如意,比如列表的赋值.复制.浅 ...

  4. python process 函数_Python Process创建进程的2种方法详解

    前面介绍了使用 os.fork() 函数实现多进程编程,该方法最明显的缺陷就是不适用于 Windows 系统.本节将介绍一种支持 Python 在 Windows 平台上创建新进程的方法. Pytho ...

  5. 站长在线Python精讲:在Python中格式化字符串的两种方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中格式化字符串的两种方法详解>.本知识点主要内容有:使用%操作符格式化字符串和使用format()方法格式化字 ...

  6. Python精讲:在Python中遍历字典的三大方法详解

    欢迎你来到站长在线的站长学堂学习Python知识,本文学习的是<在Python中遍历字典的三大方法详解>.本知识点主要内容有:使用字典对象的items()方法可以遍历字典的项和字典的&qu ...

  7. python 命令-python解析命令行参数的三种方法详解

    这篇文章主要介绍了python解析命令行参数的三种方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 python解析命令行参数主要有三种方法: ...

  8. python输入字符串并反序result_python字符串反转的四种方法详解

    python字符串反转的四种方法详解 这篇文章主要介绍了python字符串反转的四种详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.用red ...

  9. python截图黑屏_对Python获取屏幕截图的4种方法详解

    Python获取电脑截图有多种方式,具体如下: PIL中的ImageGrab模块 windows API PyQt pyautogui PIL中的ImageGrab模块 import time imp ...

最新文章

  1. python画动态爱心-【Python】五分钟画一条动态心形曲线~
  2. Cacti 每日导出图形及流量报表 [未完成]
  3. 前端学习(3251):dom的diff算法2
  4. 操作系统真相还原不明白的地方
  5. Ubuntu16安装OpenStack
  6. SinoBBD:以后发优势提供不一样的一体化融合CDN服务
  7. C程序设计--指针(用“ 函数 ”对“ 数组 ” 进行操作)
  8. 前端毕业设计:Nodejs+Vue菜鸟驿站仓库管理系统的设计与实现
  9. CrackMe —— 004
  10. Debian中Nvidia驱动、Firefox、Flash以及alsa声卡驱动安装详解
  11. 小白也能学引流技巧:如何利用微信群找到你的精准用户| 二维彩虹二维码生成器
  12. java for冒号_浅谈对Java双冒号::的理解
  13. python的多任务处理
  14. python桌面实验小软件,实现地图信息整理为电子表格
  15. 英语词根记忆法(8)
  16. 如何用Python代码发一个炫酷的朋友圈
  17. Android技术点汇总
  18. 在PyCharm 中安装MongoDB库的一系列操作
  19. 己酸戊酯的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  20. 计算机系统字体安装程序,windows系统字体安装方法:使用字体安装软件-windows技巧-电脑技巧收藏家...

热门文章

  1. Spring配置redis(自定义方法)
  2. 优化云课堂直播间性能的一些思考与总结
  3. Win7系统C盘空间不足
  4. window 右击菜单启动 nodejs app
  5. AJAX ControlToolkit学习日志-AnimationExtender控件(3)
  6. 使用ssl_exporter监控K8S集群证书
  7. 时序数据库timescaleDB安装
  8. 启动tomcat和java步骤
  9. 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】
  10. 【Linux】Ubuntu输入法不能开机自启的解决方法