On Sun, Nov 20, 2016 at 11:19 PM, Thorsten Kampe
<thors...@thorstenkampe.de> wrote:
> The whole point of my posting was non hashable keys (like lists):
>
> ```
>>>> dictitem
> [([1], '11'), ([2], '22'), ([4], '33'), ([3], '44')]
>>>> dict(dictitem)
> ---------------------------------------------------------------------
> TypeError                           Traceback (most recent call last)
> <ipython-input-12-0f2b626ac851> in <module>()
> ----> 1 dict(dictitem)
>
> TypeError: unhashable type: 'list'
> ```

I see. So you want to be able to have something that looks and feels
like a dictionary, but uses a different way of looking things up.
Makes reasonable sense, on the surface.

Before you go down that route, I strongly recommend reading up on
exactly *why* a dictionary has the requirement of hashability, and
what the consequences are of trying to look things up using lists as
keys. You can easily experiment with it like this:

class HashableList(list):
    def __hash__(self):
        return hash(tuple(self))

Use those in your dict, rather than vanilla lists. Then you can mess
around with the consequences of mutable dict keys.

Alternatively, switch from using lists to using tuples. They're
hashable and immutable, thus avoiding the problems. If what you're
trying to do is use multi-part dict keys, a tuple is far and away the
best solution.

ChrisA
-- 
https://mail.python.org/mailman/listinfo/python-list

Reply via email to