python列表append问题

company_dict_noIPO = {}
company_noIPOlist = []
for item in dom.iterfind('list/item'):

if item.iterfind('StockHolderInfolist'):
    #company_dict_noIPO['corp']
   # corpname=item.findtext('EnName')
    for items in item.iterfind('StockHolderInfolist'):
        for entry in items:
            #company_dict_noIPO['corp']=corpname
            company_dict_noIPO['stockhoder'] = entry.findtext('stockhoder')
            company_dict_noIPO['investratio'] = entry.findtext('investratio')
            company_dict_noIPO['investamt'] = entry.findtext('investamt')
            company_noIPOlist.append(company_dict_noIPO)
            #print company_dict_noIPO 
            print company_noIPOlist

这里我想把每次解析出来的字典company_dict_noIPO用append方法添加到列表company_noIPOlist里,但是结果显示如下:

第一次循环得到的结果:
[{'stockhoder': u'u674eu6653u519b', 'investamt': u'800.00u4e07u5143', 'investratio': '72.73%'}]

第二次循环得到的结果:
[{'stockhoder': u'u6bb5u6625u751f', 'investamt': u'300.00u4e07u5143', 'investratio': '27.27%'}, {'stockhoder': u'u6bb5u6625u751f', 'investamt': u'300.00u4e07u5143', 'investratio': '27.27%'}]

在第二次循环迭代的时候把第一次循环获得的列表元素给覆盖了,请问这是什么问题,怎么解决?
字典
我一开始以为是循环有问题,但是print字典company_dict_noIPO的结果如下:
{'stockhoder': u'u674eu6653u519b', 'investamt': u'800.00u4e07u5143', 'investratio': '72.73%'}
{'stockhoder': u'u6bb5u6625u751f', 'investamt': u'300.00u4e07u5143', 'investratio': '27.27%'}
所以循环是没问题的。

完全没思路到底是哪里出错了,求大神解决。。

阅读 3.2k
3 个回答
company_noIPOlist = []
for item in dom.iterfind('list/item'):
    if item.iterfind('StockHolderInfolist'):
        #company_dict_noIPO['corp']
       # corpname=item.findtext('EnName')
        for items in item.iterfind('StockHolderInfolist'):
            for entry in items:
                company_dict_noIPO = {}
                #company_dict_noIPO['corp']=corpname
                company_dict_noIPO['stockhoder'] = entry.findtext('stockhoder')
                company_dict_noIPO['investratio'] = entry.findtext('investratio')
                company_dict_noIPO['investamt'] = entry.findtext('investamt')
                company_noIPOlist.append(company_dict_noIPO)
                #print company_dict_noIPO 
                print company_noIPOlist

浅拷贝出现的问题,每次应该重新声明一个dict;
company_noIPOlist.append({company_dict_noIPO.items()})

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题