【发布时间】:2017-01-19 07:02:57
【问题描述】:
在 Python 中,当您想将列表用作某些字典的键时,可以将它们转换为元组,它们是不可变的,因此是可散列的。
>>> a = {}
>>> a[tuple(list_1)] = some_value
>>> a[tuple(list_2)] = some_other_value
当您想使用 set 对象作为某些字典的键时也会发生同样的情况 - 您可以构建一个 frozenset,它又是不可变的,因此是可散列的。 p>
>>> a = {}
>>> a[frozenset(set_1)] = some_value
>>> a[frozenset(set_2)] = some_other_value
但是对于字典来说似乎没有等价物。
我想到的第一个想法(最后发现它很糟糕)是使用str(some_dict) 作为键。但是,字典总是使用不同的哈希函数(这会影响元素的顺序),所以相等的字典的字符串可能会不同。
是否有任何被称为良好做法的解决方法,或者是否有人有其他想法如何使用类似字典的对象作为其他字典的键?
【问题讨论】:
-
您可以在
collections.OrderedDict上致电str()? -
@SimeonVisser OrderedDict:除非您将添加元素的顺序视为 dict 值的一部分,否则您可能会对您得到的行为感到惊讶——我曾经认为 OrderedDict 是一个树形图,按键排序,但可惜(对于这个用例)不是。
标签: python dictionary immutability