list.append not working?

Bruno Desthuilliers bruno.42.desthuilliers at wtf.websiteburo.oops.com
Mon Jul 9 12:21:37 EDT 2007


Hardy a écrit :
> On 5 Jul., 18:07, infidel <saint.infi... at gmail.com> wrote:
>> On Jul 5, 8:58 am, Hardy <hhart... at gmail.com> wrote:
>>
>>
>>
>>> I experience a problem with append(). This is a part of my code:
>>>         for entity in temp:
>>>             md['module']= entity.addr.get('module')
>>>             md['id']=entity.addr.get('id')
>>>             md['type']=entity.addr.get('type')
>>>             #print md
>>>             mbusentities.append(md)
>>>             #print mbusentities
>>> I want something like: [{'module': 'home', 'id': 123, 'type': 'core'},
>>> {'module': 'work', 'id': 456, 'type': 'core'}]
>>> md is always correct, BUT:mbusentities is wrong. Length of
>>> mbusentities is same of temp, so it appended everything. BUT:
>>> mbusentities only shows the values of the last append: [{'module':
>>> 'work', 'id': 456, 'type': 'core'}, {'module': 'work', 'id': 456,
>>> 'type': 'core'}]
>>> What's wrong?
>> You're reusing the same "md" dictionary over and over, appending the
>> same object to the list each time.  So what you have is a list of
>> references to the same dictionary.  You need to set md = {} first
>> thing each iteration.
> 
> Thanks, that was my mistake, should take a break, getting code-blind :D
> 

append = mbusentities.append
for entity in temp:
   get = entity.addr.get
   append(dict((k, get(k)) for k in ('module', 'id', 'type')))



More information about the Python-list mailing list