• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

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

python 搞代码 4年前 (2022-01-08) 22次浏览 已收录 0个评论

今天小编就为大家分享一篇关于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))

但是运行的结果却是:

来源gao@daima#com搞(%代@#码网[{‘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中使用遍历在列表中添加字典遇到的坑的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Python中使用遍历在列表中添加字典遇到的坑

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址