关于向列表循环添加字典后续数据被替代的问题

关于向列表中循环添加字典形成json格式数据的注意问题

使用列表、字典之间的相互嵌套可以很容易的写出json格式的数据,但是不能直接使用*列表.append(字典)*方法将字典添加到列表中,因为每次添加时,添加的字典总会将前几个的数据覆盖掉

例如:

text = """id,name,age,phone,job
1,alex,22,13651054608,IT
2,wusir,23,13304320533,Tearcher
3,老男孩,18,1333235322,IT"""
data = text.split("\n")
info = []
i = None
info_mid = []
dic = {}
for a in data:
info_mid.append(a.split(","))
for i in range(1,4):
for index in range(len(info_mid[0])):
dic[info_mid[0][index]] = info_mid[i][index]
info.append(dic)
print(info)
"""
结果

[{'id': '3', 'name': '老男孩', 'age': '18', 'phone': '1333235322', 'job': 'IT'},

 {'id': '3', 'name': '老男孩', 'age': '18', 'phone': '1333235322', 'job': 'IT'},

 {'id': '3', 'name': '老男孩', 'age': '18', 'phone': '1333235322', 'job': 'IT'}]

"""

这是因为*字典(dict)*在Python里是object,不属于primitive type(即int、float、string、None、bool)。这意味着你一般操控的是一个指向object(对象)的指针,而非object本身。

所以应该使用copy()方法

text = """id,name,age,phone,job
1,alex,22,13651054608,IT
2,wusir,23,13304320533,Tearcher
3,老男孩,18,1333235322,IT"""
data = text.split("\n")
info = []
i = None
info_mid = []
dic = {}
for a in data:
info_mid.append(a.split(","))
for i in range(1,4):
for index in range(len(info_mid[0])):
dic[info_mid[0][index]] = info_mid[i][index]
info.append(dic.copy())
print(info)
"""
结果
[{'id': '1', 'name': 'alex', 'age': '22', 'phone': '13651054608', 'job': 'IT'},
{'id': '2', 'name': 'wusir', 'age': '23', 'phone': '13304320533', 'job': 'Tearcher'},
{'id': '3', 'name': '老男孩', 'age': '18', 'phone': '1333235322', 'job': 'IT'}]
"""

 

posted @ 2021-04-21 11:51  小吴同学wu  阅读(145)  评论(0)    收藏  举报