Python 列表添加字典问题学习记录

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

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值