Python创建空列表的字典2种方法详解

 更新时间:2020年02月13日 15:38:44   投稿:WDC  
这篇文章主要介绍了Python创建空列表的字典2种方法详解,需要的朋友可以参考下

如果要在 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创建空列表的字典方法请查看下面的相关链接

相关文章

  • PyQt5+pycharm开发环境搭建的实现步骤(图文)

    PyQt5+pycharm开发环境搭建的实现步骤(图文)

    本文针对创建PyQt运行环境+PyCharm开发环境的过程进行记录,文中通过图片示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • python实现Dijkstra静态寻路算法

    python实现Dijkstra静态寻路算法

    这篇文章主要介绍了python实现Dijkstra静态寻路算法,常用于路由算法或者作为其他图算法的一个子模块,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • python用socket传输图片的项目实践

    python用socket传输图片的项目实践

    使用python在网络上传送图片数据,需要以byte格式读取图片,这样才可以通过socket传输,本文就来介绍了python用socket传输图片的项目实践,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • python数据处理67个pandas函数总结看完就用

    python数据处理67个pandas函数总结看完就用

    这篇文章主要介绍了python数据处理67个pandas函数的梳理总结,看完就可以去用了,有需要的朋友可以借鉴参考下,希望能够有所帮助
    2021-11-11
  • python中尾递归用法实例详解

    python中尾递归用法实例详解

    这篇文章主要介绍了python中尾递归用法,较为详细的分析了尾递归原理与相关使用技巧,非常具有实用价值,需要的朋友可以参考下
    2015-04-04
  • 使用Pytest.main()运行时参数不生效问题解决

    使用Pytest.main()运行时参数不生效问题解决

    本文主要介绍了使用Pytest.main()运行时参数不生效问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • Python lxml模块的基本使用方法分析

    Python lxml模块的基本使用方法分析

    这篇文章主要介绍了Python lxml模块的基本使用方法,结合实例形式分析了Python安装与使用lxml模块常见操作技巧与相关注意事项,需要的朋友可以参考下
    2019-12-12
  • python PyQt5事件机制和定时器原理分析及用法详解

    python PyQt5事件机制和定时器原理分析及用法详解

    PyQt为事件处理提供了两种机制:高级的信号与槽机制,以及低级的事件处理机制,在基于PyQt5的应用程序开发过程中经常会遇到一些需要循环执行的任务,即定时多长时间任务循环一次,本文给大家介绍了python PyQt5事件机制和定时器原理和用法,需要的朋友可以参考下
    2024-07-07
  • matplotlib.pyplot绘图显示控制方法

    matplotlib.pyplot绘图显示控制方法

    今天小编就为大家分享一篇matplotlib.pyplot绘图显示控制方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 如何使用PyCharm引入需要使用的包的方法

    如何使用PyCharm引入需要使用的包的方法

    这篇文章主要介绍了如何使用PyCharm引入需要使用的包的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09

最新评论