[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