向parsedData列表添加字典时重复出现最后一个字典的问题
问题原因分析
你遇到的问题核心在于**userData字典是在循环外部定义的**——整个循环过程中,你始终在修改同一个字典对象,然后反复把这个对象的引用添加到parsedData列表里。当循环结束时,这个字典里存的是最后一次循环修改的值,所以列表里的两个元素其实都指向同一个字典,看起来就像是两次添加的都是最后一条数据。
解决方法
有两种简单的修复方式:
方法1:把字典定义移到循环内部
每次循环都创建一个全新的userData字典,这样添加到列表里的都是独立的对象,不会互相干扰:
parsedData = [] jsondict=[{u'Name': u'BILL', u'ID': u'1028', u'CARS': [u'BMW', u'AUDI']}, {u'Name ': u'TOM', u'ID': u'1029', u'CARS': [u'TOYOTA', u'FERRARI']}] for distro in jsondict: userData = {} # 每次循环都新建一个字典 userData['Name'] = distro['Name'] userData['ID'] = distro['ID'] userData['CARS1'] = distro['CARS'][0] userData['CARS2'] = distro['CARS'][1] parsedData.append(userData)
方法2:添加时创建字典副本
如果不想移动字典定义,可以在append的时候用copy()方法创建当前字典的副本,这样添加到列表的是独立的副本,而不是原字典的引用:
parsedData = [] userData = {} jsondict=[{u'Name': u'BILL', u'ID': u'1028', u'CARS': [u'BMW', u'AUDI']}, {u'Name ': u'TOM', u'ID': u'1029', u'CARS': [u'TOYOTA', u'FERRARI']}] for distro in jsondict: userData['Name'] = distro['Name'] userData['ID'] = distro['ID'] userData['CARS1'] = distro['CARS'][0] userData['CARS2'] = distro['CARS'][1] parsedData.append(userData.copy()) # 添加副本而非原引用
另外提个小细节:你的第二个字典里的键是Name (带空格),如果后续要统一处理数据的话,可能需要修正这个不一致的地方哦。
内容的提问来源于stack exchange,提问作者bornomala
相关产品推荐
相关产品推荐

