python列表的循环遍历使用教程(Python中使用遍历在列表中添加字典遇到的坑)
python列表的循环遍历使用教程
Python中使用遍历在列表中添加字典遇到的坑
|
""" 已知列表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)) |
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对开心学习网的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/wu0che28/article/details/79924360
- 怎么在当前目录调用python库(Python父目录、子目录的相互调用方法)
- pyqt一键部署python环境(python使用PyQt5的简单方法)
- python抓取贴吧标题和图片代码(Python实现的爬取百度贴吧图片功能完整示例)
- python的模块与包与库(Python 中包/模块的 `import` 操作代码)
- python中字典的常用操作(11个Python3字典内置方法大全与示例汇总)
- python删除list的指定元素(Python list列表中删除多个重复元素操作示例)
- pythonsvr时序预测(利用Python半自动化生成Nessus报告的方法)
- python设计一个聊天机器人(手把手教你使用Python创建微信机器人)
- python ssh 连接(python pexpect ssh 远程登录服务器的方法)
- python最基本的编程工具(5款Python程序员高频使用开发工具推荐)
- python3.7.2 详细安装教程(python3.5安装python3-tk详解)
- python如何编写定时器(python 定时器,轮询定时器的实例)
- python中的迭代器详解(Python通过for循环理解迭代器和生成器实例详解)
- python 配置文件环境变量(python环境路径配置以及命令行运行脚本)
- python编程ide工具(这6款Python IDE&代码编辑器,你都用过吗?)
- python批量创建字典(Python编写合并字典并实现敏感目录的小脚本)
- 这部民警编演的红色话剧,讲述了一个不断追寻的故事(这部民警编演的红色话剧)
- 日本菜有什么好吃(日本菜有什么好吃的做法)
- 韩国泡菜做法(韩国泡菜的做法步骤)
- 泰国旅游攻略(泰国旅游攻略必去景点)
- 越难春卷(越难春卷皮怎么用)
- 休闲VS新古典 办公家居简约设计(办公家居简约设计)
热门推荐
- jQuery如何跳出each循环
- pythonide使用教程(对Python Pexpect 模块的使用说明详解)
- 国内云主机哪家靠谱(云主机哪家比较便宜)
- python socket 设置通信协议(详解python中TCP协议中的粘包问题)
- dede收录查询插件(dede:likearticle文章标签和tag标签关联错误解决方法)
- dedecms插件解析(dedecms文章评论功能用法分析)
- 云服务器自建服务器成本比较(云服务器与服务器租用之间的区别在哪里?)
- php排序代码详解(PHP实现数据四舍五入的方法小结4种方法)
- navicat不能连接到mysql报错2013(Navicat连接SQL Server数据:报错08001-命名管道提供程序的完美解决方法)
- python获取特定时间日期的数据(Python提取特定时间段内数据的方法实例)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9