Python列表中存放字典遇到的问题及处理

 更新时间:2024年02月24日 10:39:56   作者:小黄鸭and小黑鸭  
这篇文章主要介绍了Python列表中存放字典遇到的问题及处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
(福利推荐:【腾讯云】服务器最新限时优惠活动,云服务器1核2G仅99元/年、2核4G仅768元/3年,立即抢购>>>:9i0i.cn/qcloud

(福利推荐:你还在原价购买阿里云服务器?现在阿里云0.8折限时抢购活动来啦!4核8G企业云服务器仅2998元/3年,立即抢购>>>:9i0i.cn/aliyun

列表中存放字典遇到的问题

使用列表、字典之间的相互嵌套可以很容易的实现json数据格式,但是昨天在往列表中装入字典时遇到了问题:

直接使用append方法将字典添加到列表中,如果需要更改字典中的数据,那么列表中的内容也会发生改变,这是因为dict在Python里是object,不属于primitive type(即int、float、string、None、bool)。

这意味着你一般操控的是一个指向object(对象)的指针,而非object本身。

下面是改善方法:使用copy()

列表和字典的存储方式

数组如何存储?

数组底层的存储结构是顺序存储结构,这样的结构有这样一些优点:逻辑上相邻的节点在物理位置上也是相邻的,可以节省空间,并且可以实现随机存取(也称直接访问)。创建一个数组时,会在内存中开辟一块固定长度的区域用于直接存储元素,扩容要考虑这块区域的后面是否有存储其他对象,所以数组在定义好之后就无法扩容了。而且在查询时,是根据索引和元素存储大小去计算地址偏移量的,如果元素类型不一致,所占内存空间不相同,就不能实现随机存储,所以数组不能同时存储不同类型的数据;

列表如何存储?

列表本质是动态的数组列表存储的是每个元素在内存中的地址(即引用),当列表中空白占位低于1/3时,会在内存中开辟一块更大的空间,并将旧列表中存储的地址复制到新列表中,旧列表则被销毁,这样就实现了扩容。

因为列表存储的是元素的引用这个特性,而引用所占的内存空间是相同的,这样便可以同时存放不同类型的数据了。

Python中的列表与数组的区别在于:

  • 数组定义好之后就无法扩容了,而列表在定义好之后可以扩容;
  • 数组只能同时存储一种类型的数据,而列表可以同时存储不同类型的数据。

字典如何存储?

Python中的字典底层是通过散列表(哈希表)来实现的, “哈希表是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。”

字典本质也是一个数组,但其索引是键经过散列函数处理后得到的散列值,散列函数的目的是使键均匀地分布在散列表中,并且可以在内存中以O(1)的时间复杂度进行寻址,从而实现快速查找和修改。散列表其实是一个稀疏数组(总是有空白元素的数组称为稀疏数组),散列表里的单元通常叫作表元。在字典的散列表当中,每个键值对都占用一个表元,每个表元都有两个部分,一个是对键的引用,另一个是对值的引用。散列表中散列函数的设计困难在于将数据均匀分布在散列表中,从而尽量减少散列碰撞和冲突。

字典如何添加和查询?

添加:Python 调用内部的散列函数,将键(Key)作为参数进行转换,得到一个唯一的地址(这也就解释了为什么给相同的键赋值会直接覆盖的原因,因为相同的键转换后的地址是一样的),然后将值(Value)存放到该地址中。

查询:使用散列函数将key转换为数组的下标,并定位到数组对应位置获取value。

字典为什么是无序的?

1.键值的哈希碰撞,hash(key1) == hash(key2)时,向字典里连续添加的这个两个键的顺序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。

序是不可以控制的,也是无法做到连续的,后来的键会按算法调整到其它位置。

2.字典空间扩容,当键的数量超过字典默认开的空间时,字典会做空间扩容,扩容后的键顺和创建顺序就会发生变化,不受人为控制。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持程序员之家。

相关文章

  • Python实现带参数的用户验证功能装饰器示例

    Python实现带参数的用户验证功能装饰器示例

    这篇文章主要介绍了Python实现带参数的用户验证功能装饰器,结合实例形式分析了Python用户验证装饰器具体定义及使用技巧,需要的朋友可以参考下
    2018-12-12
  • python下对hsv颜色空间进行量化操作

    python下对hsv颜色空间进行量化操作

    这篇文章主要介绍了python下对hsv颜色空间进行量化操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python代码检查工具pylint 让你的python更规范

    python代码检查工具pylint 让你的python更规范

    遇到一个新的问题,总是离不开3W原则(What,Why,hoW),下面是对python代码静态检测工具pylint的学习
    2012-09-09
  • Python中pymysql 模块的使用详解

    Python中pymysql 模块的使用详解

    pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同。但目前pymysql支持python3.x而后者不支持3.x版本。
    2019-08-08
  • Python读取Hive数据库实现代码详解

    Python读取Hive数据库实现代码详解

    这篇文章主要介绍了Python读取Hive数据库实现代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-03-03
  • jupyter notebook 多环境conda kernel配置方式

    jupyter notebook 多环境conda kernel配置方式

    这篇文章主要介绍了jupyter notebook 多环境conda kernel配置方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-04-04
  • Python应用之利用pyecharts画中国地图

    Python应用之利用pyecharts画中国地图

    这篇文章主要介绍了Python应用之利用pyecharts画中国地图,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • Python设计模式之策略模式实例详解

    Python设计模式之策略模式实例详解

    这篇文章主要介绍了Python设计模式之策略模式,结合实例形式分析了策略模式的概念、原理并结合实例形式分析了Python定义与使用策略模式相关操作技巧,需要的朋友可以参考下
    2019-01-01
  • 浅谈Python中数据解析

    浅谈Python中数据解析

    本文给大家介绍的是Python中的数据解析的集中方式,包括列表解析、字典解析、集合解析,并附上相关示例,有需要的小伙伴可以参考下。
    2015-05-05
  • Python全栈之进程和守护进程

    Python全栈之进程和守护进程

    这篇文章主要为大家介绍了Python进程和守护进程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12

最新评论

?


http://www.vxiaotou.com