Python中使用遍历在列表中添加字典遇到的坑
作者:YOYO__2018 时间:2021-12-22 13:35:32
"""
已知列表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,遍历列表,字典
0
投稿
猜你喜欢
python 多线程中子线程和主线程相互通信方法
2021-05-13 03:56:44
Oracle11.2.0.1如何升级到11.2.0.3 Oracle同版本升级
2023-06-25 15:28:11
17个asp常用的正则表达式
2008-01-15 18:58:00
javascript 操作文件 实现方法小结
2024-04-22 12:48:27
利用Python3分析sitemap.xml并抓取导出全站链接详解
2022-01-26 16:27:08
go语言beego框架web开发语法笔记示例
2024-05-21 10:25:22
解析Vue2.0双向绑定实现原理
2024-06-05 15:29:32
golang正则之命名分组方式
2024-05-22 10:17:10
python测试开发django之使用supervisord 后台启动celery 服务(worker/beat)
2023-10-14 05:55:53
mysql中如何查看表空间
2024-01-27 00:25:25
js判断复选框是否选中及选中个数的实现代码
2024-04-22 22:17:03
Gorm更新零值问题解决思路与过程
2024-04-25 13:18:25
python中的map函数语法详解
2021-04-29 22:07:00
MySql .frm数据库文件导入的问题
2024-01-18 19:08:09
SQL Server中row_number函数用法入门介绍
2024-01-26 22:45:04
Python3 max()函数基础用法
2021-04-16 06:53:26
浅谈Python中的正则表达式
2023-11-02 12:48:18
Pytest之测试命名规则的使用
2022-09-23 00:51:49
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2024-05-11 09:16:42
python实现自动化群控的步骤
2023-07-04 11:50:25