Dict when defining not returning multi value key error

Roy Smith roy at panix.com
Thu Jul 31 22:32:36 EDT 2014


In article <mailman.12498.1406856928.18130.python-list at python.org>,
 Ned Batchelder <ned at nedbatchelder.com> wrote:

> On 7/31/14 5:15 PM, Ian Kelly wrote:
> > On Thu, Jul 31, 2014 at 5:24 AM, Dilu Sasidharan <dilu.seven at gmail.com> 
> > wrote:
> >> Hi,
> >>
> >> I am wondering why the dictionary in python not returning multi value key
> >> error when i define something like
> >>
> >> p = {'k':"value0",'k':"value1"}
> >>
> >> key is string immutable and sometimes shares same id.
> >>
> >> also if the key is immutable and have different ids.
> >>
> >> like
> >>
> >> p = {'1':"value0",'1.0':"value1"}
> >
> > In this latter case note that '1' and '1.0' are not equal, so this
> > will simply result in two separate entries in the dict anyway.
> >
> 
> You might want to check first:
> 
>      Python 2.7.5 (default, Aug  5 2013, 19:47:08)
>      >>> 1 == 1.0
>      True
>      >>> {1.0: None, 1: None}
>      {1.0: None}

Yeah, but '1' != '1.0' in any version of Python.  Might be equal in PHP, 
though :-)

As for the original question, there's nothing that says you can't assign 
multiple times to the same key in a dictionary.  The keys may be 
immutable, but the values aren't.  If you assign to an existing key, it 
just overwrites the value.  I assume that when it sees something like:

p = {'k':"value0", 'k':"value1"}

it effectively treats that as if you had written:

p = {}
p['k'] = "value0"
p['k'] = "value1"

and just overwrites the first assignment with the second.  If you want 
something akin to C++'s multimap, you probably want defaultdict(set) or 
defaultdict(list).



More information about the Python-list mailing list