Dictionary assignment

Istvan Albert ialbert at mailblocks.com
Fri Aug 15 22:03:58 EDT 2003


Mark Daley wrote:

> format[self.formats.get()][key] = current[key]
> 
> Now, all disgust from my example aside, shouldn't this line cause a new key
> (whatever self.formats get() produces) whose contents are an exact copy of
> current?

First you need to assure that format[self.formats.get()] contains 
another dictionary as a value. Here is an example:

>>>> a = {}
>>>> a[1] = {}
>>>> a[1][2] = 1

works as expected but

>>>> a[2][3] = 4

will fail with KeyError:2 because this construct attempts to fetch the
value corresponding to key 2 and then add to that dictionary the 3/4 
key/value pair.

It is indeed confusing, I never thought about it and caught me by 
surprise that it is KeyError:2 that is being thrown.

As one parses the expression from left to right it reads as if the 
assignment to key 2 comes first and only then does the assignment
to key 3 become "active". The error message one expects is that a[2]
does not support assigment.

Istvan.






More information about the Python-list mailing list