[Tutor] TypeError: dict objects are unhashable
A.T.Hofkamp
a.t.hofkamp at tue.nl
Mon Mar 16 10:50:14 CET 2009
Lie Ryan wrote:
> Emile van Sebille wrote:
>> Mark Tolonen wrote:
>>>>>> [dict(n) for n in set(tuple(n.items()) for n in l1)]
>>
>> Anyone know if the ordered items for two different dicts where dicta
>> == dictb is guaranteed the same? I know the ordering is unspecified
>> but you can depend on the sequence of keys matching data and I think
>> it'll also match items.
>>
>> but for all DA's and DB's below, is that true?
>>
>
> Considering how dictionary is implemented, I don't think so. The
> dictionary is internally implemented as a hash table, and two dictionary
> with identical items may have different sized hash table, the algorithm
> guarantees efficient usage of memory (it resizes when it's too small or
> too big). On a resize, the hashes are recalculated and the ordering
> rescrambled.
And a short demo to confirm:
Python 2.3.4 (#1, Jul 25 2008, 14:24:21)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-10)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> x = range(10)
>>> y = x[:]
>>> y.reverse()
>>> d1 = dict([(i*1000, i) for i in x])
>>> d2 = dict([(i*1000, i) for i in y])
>>> d1.items()
[(0, 0), (4000, 4), (1000, 1), (8000, 8), (6000, 6), (9000, 9), (2000, 2),
(5000, 5), (7000, 7), (3000, 3)]
>>> d2.items()
[(8000, 8), (4000, 4), (2000, 2), (0, 0), (9000, 9), (6000, 6), (5000, 5),
(3000, 3), (1000, 1), (7000, 7)]
Sincerely,
Albert
More information about the Tutor
mailing list