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