• 欢迎访问DBA的辛酸事儿,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站
  • 欢迎大家关注博主公众号:DBA的辛酸事儿
  • 博文中若有错误的地方,请大家指正,大家的指正是我前进的动力

Python中遍历列表并在列表中添加字典

python SEian.G 4年前 (2021-01-19) 1683次浏览 已收录 0个评论

今天在开发过程中遇到个小问题,需求是Python中遍历列表并在列表中添加字典,挺简单的一个需求,实现的时候出现了个小插曲,感觉挺有意思的,记录下,下面是一个非常直观的简化小示例

问题程序:

dict1={}
list1=[]
for va in range(5):
    dict1["num"]=va
    list1.append(dict1)

print(list1)

但是运行的结果却是:

[{'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}, {'num': 4}]

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

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

65511768
65511768
65511768
65511768
65511768

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

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

63193224
63193224
63193224
63193224
63193224

于是明白了,因为每次添加的都是同一个内存到list中去了,dict1每次写入的时候改变了内存中的value,但是地址不变,即只创建了一次内存空间,而只会不断的改变value了。

解决方法:每次遍历时候创建一个新的dict1

list1=[]
for va in range(5):
    dict1 = {}
    dict1["num"]=va
    list1.append(dict1)

print(list1)

执行结果:

[{u'num': 0}, {u'num': 1}, {u'num': 2}, {u'num': 3}, {u'num': 4}]

Python中遍历列表并在列表中添加字典


如果您觉得本站对你有帮助,那么可以收藏和推荐本站,帮助本站更好地发展,在此谢过各位网友的支持。
转载请注明原文链接:Python中遍历列表并在列表中添加字典
喜欢 (2)
SEian.G
关于作者:
用心去记录工作,用心去感受生活,用心去学着成长;座右铭:苦练七十二变,笑对八十一难
发表我的评论
取消评论

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

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

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