[Tutor] Adding to a dict through a for loop confusion.

cs at zip.com.au cs at zip.com.au
Tue May 17 05:01:48 EDT 2016


On 17May2016 04:28, Chris Kavanagh <ckava3 at gmail.com> wrote:
>Could someone tell me why this different behavior occurs between these 2
>code snippets, please. The 1st example has quotes around it ['item'] only
>adds the last item to the dict (cart). In the 2nd example the item does not
>have quotes around it [item] and every entry is added to the dict.
>
>Why?
[...]
># Example #1
>cart_items = ['1','2','3','4','5']
>cart = {}
>for item in cart_items:
>    cart['item'] = item

This for loop assigns the values '1','2','3','4','5' in succession to the 
variable named "item". Then the body of the loop assigns that value (via the 
variable "item") to the single dictionary slot with the fixed key with string 
value 'item' i.e. always the same slot.  And the last item is the one kept.  
All the earlier assignments are overwritten by the later ones: they happen, but 
are replaced.

>print cart
>#output
>{'item': 5}

Which you see above.

># Example #2
>cart_items = ['1','2','3','4','5']
>cart = {}
>for item in cart_items:
>    cart[item] = item

Here, the variable named "item" takes on the values as before, but the diction 
slot chosen also comes form that variable. So each value ends up in its own 
slot as your output shows.

>print cart
># output
>{'1': '1', '3': '3', '2': '2', '5': '5', '4': '4'}

The essential difference here is that in the first example the expression for 
the slot in the dictionary is the expression:

  'item'

which is simply the fixed string 'item'. In the second example the expression 
is:

  item

which produces the current value stored in the variable "item".

Cheers,
Cameron Simpson <cs at zip.com.au>


More information about the Tutor mailing list