dict duplicity

John Machin sjmachin at lexicon.net
Thu Aug 18 20:31:31 EDT 2005


Randy Bush wrote:
> a dict written as
> 
>    pKey = (prefix, pLen, origin)
> 
>    val = dict.get(pKey)
>    if val == None:
>       dict[pKey] = (timeB, timeB)
>    else:
>       if val[0] > timeB:  val[0] = timeB
>       if val[1] < timeB:  val[1] = timeB
>       dict[pKey] = val
> 
> and read back as
> 
>    for pKey, pVal in dict.iteritems():
>       print \
>          pKey[0], hash(pKey[0]), \
>          pKey[1], hash(pKey[1]), \
>          pKey[2], hash(pKey[2]), \
>          "hash=", hash(pKey), \
>          pVal[0], hash(pVal[0]), \
>          pVal[1], hash(pVal[1])
> 
> when run with | sort, produces
> 
> 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 917088000 917088000
> 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 917088000 917088000
> 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 917088000 917088000
> 12.0.0.0 -2054516913 8 8 7018 329707286 hash= -604503432 917088000 917088000 917088000 917088000

Note that there are FOUR entries above with the same hash and (more 
importantly, as Paolino was trying to drum into you) the same key.


> 12.0.0.0 -2054516913 9 -1293912648 7018 329707286 hash= -1578430040 917088000 917088000 917088000 917088000
> 12.0.0.0 -2054516913 9 -1293912648 7018 329707286 hash= -1578430040 917088000 917088000 917088000 917088000
> 
> not that there are two entries with the same hash=
> 
> i am utterly confused

Firstly, to remove one possible source of confusion, change the name of 
your dictionary ... "mydict" or "fred" ... anything but "dict"

Next, after you have created the dictionary and added items to it, do this:
print len(fred)
print len(fred.items())
nitems = 0
for k, v in fred.iteritems():
     nitems += 1
print nitems

If by this stage you haven't worked out what you are doing wrong, post 
an exact copy/paste of the MINIMAL code that exhibits the "multiple 
instances of same key in <dictionary>.iteritems()" problem



More information about the Python-list mailing list