Python 列表添加字典问题学习记录
最近扣了一个python脚本,踩了个坑,仅作记录,避免后续踩坑。
import json
def example1():
dict2 = {}
dict2_add = []
dic_a = []
for i in range (0,3):
dict2_add.append (dict2)
print("数据类型1:",type(dict2_add[0]),type(dict2_add[1]),type(dict2_add[2]))
print("构造列表1:",dict2_add)
vuln1_info = ['{"a":"aa","b":"bb","c":"cc"}','{"a":"aa1","b":"bb1","c":"cc1"}','{"a":"aa2","b":"bb2","c":"cc2"}']
for info in vuln1_info:
name1 = vuln1_info.index (info)
#print(info)
dict1 = json.loads (str(info))
#print(dict1)
dict2_add[name1]["A"] = dict1["a"]
dict2_add[name1]["B"] = dict1["b"]
dict2_add[name1]["C"] = dict1["c"]
dic_a.append (dict2_add[name1])
print("生成结果1:",dict2_add)
def example2():
dict2 = {}
dict2_add = []
dic_a = []
for i in range (0, 3):
dict2_add.append (dict(dict2))
print ("数据类型2:", type (dict2_add[0]), type (dict2_add[1]), type (dict2_add[2]))
print ("构造列表2:", dict2_add)
vuln1_info = ['{"a":"aa","b":"bb","c":"cc"}', '{"a":"aa1","b":"bb1","c":"cc1"}', '{"a":"aa2","b":"bb2","c":"cc2"}']
for info in vuln1_info:
name1 = vuln1_info.index (info)
# print(info)
dict1 = json.loads (str (info))
# print(dict1)
dict2_add[name1]["A"] = dict1["a"]
dict2_add[name1]["B"] = dict1["b"]
dict2_add[name1]["C"] = dict1["c"]
dic_a.append (dict2_add[name1])
print("生成结果2:",dict2_add)
if __name__ == "__main__":
example1()
print("----------------------------------------------------------------------------------------")
example2()
输出结果:
数据类型1: <class 'dict'> <class 'dict'> <class 'dict'>
构造列表1: [{}, {}, {}]
生成结果1: [{'A': 'aa2', 'B': 'bb2', 'C': 'cc2'}, {'A': 'aa2', 'B': 'bb2', 'C': 'cc2'}, {'A': 'aa2', 'B': 'bb2', 'C': 'cc2'}]
----------------------------------------------------------------------------------------
数据类型2: <class 'dict'> <class 'dict'> <class 'dict'>
构造列表2: [{}, {}, {}]
生成结果2: [{'A': 'aa', 'B': 'bb', 'C': 'cc'}, {'A': 'aa1', 'B': 'bb1', 'C': 'cc1'}, {'A': 'aa2', 'B': 'bb2', 'C': 'cc2'}]
唯一不同就是dict2_add.append (dict2)
与 dict2_add.append (dict(dict2))
。
字典赋值习惯性 append
一个常量={}
,就是添加常量字典,常量字典地址指针指向常量不变,append
添加重复值常量,没有分配新的存储空间,造成例一存在三个重复值。
正常情况下循环生成的字典需要新的存储地址,存储不同的数据,用dict
可以初始化字典,即产生不同地址指向的字典。
dict() -> new empty dictionary dict(mapping) -> new dictionary initialized from a mapping object’s