[Tutor] list of dict question
Alan Gauld
alan.gauld at btinternet.com
Fri Oct 8 10:02:05 CEST 2010
"Roelof Wobben" <rwobben at hotmail.com> wrote
> I have this programm :
>
> tournooi = [{'thuis': 'A','uit': "B",'thuisscore': 20, 'uitscore':
> 15},{'thuis': 'C','uit': "D",'thuisscore': 80, 'uitscore': 40}]
> stand = []
> tussen_thuis = {}
> tussen_uit = {}
Here you create your dictionary objects.
You never create any more dictionary objects so these are the only
ones you have.
> for wedstrijd in tournooi :
> if wedstrijd['thuis'] in stand :
> print "True"
stand is a list of dictionaries so this will never be True.
> else :
> tussen_thuis['ploeg'] = wedstrijd['thuis']
> tussen_thuis['wedstrijden'] = 1
> if wedstrijd['thuisscore']> wedstrijd['uitscore']:
> tussen_thuis['punten'] = 2
> else:
> tussen_thuis['punten'] = 0
>
> tussen_thuis['voor'] = wedstrijd['thuisscore']
> tussen_thuis ['tegen'] = wedstrijd['uitscore']
> stand.append(tussen_thuis)
Here you append the dictionary into stand
> if wedstrijd['uit'] in stand :
> print "True"
But stand is a list with a dictionary inside so this test
cannot be true since wedstrijg['uit'] is not a dictionary.
> else :
> tussen_uit['ploeg'] = wedstrijd['uit']
> tussen_uit['wedstrijden'] = 1
> if wedstrijd['thuisscore'] < wedstrijd['uitscore']:
> tussen_uit['punten'] = 2
> else:
> tussen_uit['punten'] = 0
> tussen_uit['tegen'] = wedstrijd['thuisscore']
> tussen_uit ['voor'] = wedstrijd['uitscore']
> stand.append(tussen_uit)
Now you append a second dictionary to stand.
On the next iteration you overwrite those two dictionaries
with new values then append them to the list again.
So you wind up with 2 copies of the updated dictionaries.
> So the data of A and B are overwriting by C and D.
> How can I prevent this ?
You need to create new dictionaries for each iteration of the loop.
Move the dictionary creation lines inside the loop.
HTH,
--
Alan Gauld
Author of the Learn to Program web site
http://www.alan-g.me.uk/
More information about the Tutor
mailing list