Python中使用遍历在列表中添加字典遇到的坑


Posted in Python onFebruary 27, 2019
"""
已知列表li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}] ,
定义一个函数,将该列表按照其元素的value
值进行排序,并输出结果
"""

思路很清晰,新建一个列表,然后遍历取出字典的值加入到新的列表中,再通过遍历,赋值字典,使用append方法依次添加到列表,这样就是一个按照value值排续.于是有了下面的代码:

li = [{"key": 5}, {"key": 9}, {"key": -1}, {"key": 4}]
def fun(li):
  li_1 = [] # 接收value值
  li_2 = [] # 接收新的字典
  dict_1 = {}
  for i in range(len(li)):
    li_1.append(li[i]["key"])
  li_1.sort() # 排序
  for i in li_1:
    dict_1["key"] = i
    print(dict_1)
    li_2.append(dict_1)
  return li_2
print(fun(li))

但是运行的结果却是:

[{'key': 9}, {'key': 9}, {'key': 9}, {'key': 9}]

很明显,取值被最后一个传入value的9全部替换了.为什么会这样呢?

开始怀疑是不是和字典中重复赋值给"key"有关,但是也不应该啊,每次遍历的时候就是已经把字典append到list中去了啊!

于是使用print(id(dict_1)),查看内存信息,发现这个现象:

2874566784272
2874566784272
2874566784272
2874566784272

居然都是同一地址!!再查看list中的每个元素地址:

for i in li_2:
print(id(i))

结果:(print(id(dict_1))也打印了)

2501747356944
2501747356944
2501747356944
2501747356944
2501747356944
2501747356944
2501747356944
2501747356944

于是明白了,因为每次添加的都是同一个内存到list中去了,dict_1每次写入的时候改变了内存中的value,但是地址不变,即是,创建了一次内存空间,只会不断的改变value了.完善方法:每次遍历时候创建一个新的dict_1.

代码:

def fun(li):
  li_1 = []
  li_2 = []
  for i in range(len(li)):
    li_1.append(li[i]["key"])
  li_1.sort() # 排序
  for i in li_1:
dict_1 = {} # 每次遍历时创建一个新的内存
    dict_1["key"] = i
    li_2.append(dict_1)
  return li_2
print(fun(li))

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。如果你想了解更多相关内容请查看下面相关链接

Python 相关文章推荐
Python SQLite3数据库操作类分享
Jun 10 Python
在Heroku云平台上部署Python的Django框架的教程
Apr 20 Python
python实现傅里叶级数展开的实现
Jul 21 Python
JavaScript中的模拟事件和自定义事件实例分析
Jul 27 Python
如何使用Python进行OCR识别图片中的文字
Apr 01 Python
pytorch方法测试详解——归一化(BatchNorm2d)
Jan 15 Python
Python生成器常见问题及解决方案
Mar 21 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
利用python汇总统计多张Excel
Sep 22 Python
PyTorch预训练Bert模型的示例
Nov 17 Python
Python使用openpyxl批量处理数据
Jun 23 Python
分析Python list操作为什么会错误
Nov 17 Python
Python实现定期检查源目录与备份目录的差异并进行备份功能示例
Feb 27 #Python
详解Django-restframework 之频率源码分析
Feb 27 #Python
Python的UTC时间转换讲解
Feb 26 #Python
Python逐行读取文件中内容的简单方法
Feb 26 #Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 #Python
python3编写ThinkPHP命令执行Getshell的方法
Feb 26 #Python
初探利用Python进行图文识别(OCR)
Feb 26 #Python
You might like
sqlyog 中文乱码问题的设置方法
2008/10/19 PHP
php操作excel文件 基于phpexcel
2010/07/02 PHP
PHP面向对象程序设计__tostring()和__invoke()用法分析
2019/06/12 PHP
动态加载iframe
2006/06/16 Javascript
优化JavaScript脚本的性能的几个注意事项
2006/12/22 Javascript
利用javascript移动div层-javascript 拖动层
2009/03/22 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
javascript里绝对用的上的字符分割函数总结
2014/07/31 Javascript
Egret引擎开发指南之编译项目
2014/09/03 Javascript
jQuery实现的网页竖向菜单效果代码
2015/08/26 Javascript
jQuery带进度条全屏图片轮播特效代码分享
2020/06/28 Javascript
基于javascript实现全屏漂浮广告
2016/03/31 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
微信小程序radio组件使用详解
2018/01/31 Javascript
vue中父子组件注意事项,传值及slot应用技巧
2018/05/09 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
JavaScript使用setTimeout实现倒计时效果
2021/02/19 Javascript
python 将字符串转换成字典dict
2013/03/24 Python
python中threading超线程用法实例分析
2015/05/16 Python
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
python中实现将多个print输出合成一个数组
2018/04/19 Python
解决运行出现'dict' object has no attribute 'has_key'问题
2020/07/15 Python
python中判断文件结束符的具体方法
2020/08/04 Python
安装pyecharts1.8.0版本后导入pyecharts模块绘图时报错: “所有图表类型将在 v1.9.0 版本开始强制使用 ChartItem 进行数据项配置 ”的解决方法
2020/08/18 Python
大学生毕业自我评价范文分享
2013/11/11 职场文书
策划主管的工作职责
2013/11/24 职场文书
应聘医药销售自荐书范文
2014/02/08 职场文书
《商鞅南门立木》教学反思
2014/02/16 职场文书
无锡灵山大佛导游词
2015/02/09 职场文书
自主招生自荐信范文
2015/03/04 职场文书
小学运动会宣传稿
2015/07/23 职场文书
听课评课活动心得体会
2016/01/15 职场文书
什么是检讨书?检讨书的格式及范文
2019/11/05 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server
我的收音机情缘
2022/04/05 无线电
Win11自动黑屏怎么办 Win11自动黑屏设置教程
2022/07/15 数码科技