Один из способов сделать это - создать подкласс dict и предоставить метод хеширования. то есть:
class HashableDict(dict):
def __hash__(self):
return hash(tuple(sorted(self.iteritems())))
>>> d = HashableDict(a=1, b=2)
>>> d2 = { d : "foo"}
>>> d2[HashableDict(a=1, b=2)]
"foo"
Однако имейте в виду причины, по которым dicts (или любые изменяемые типы) этого не делают: изменение объекта после его добавления в хеш-таблицу изменит хеш, а это значит, что dict теперь будет иметь его в неправильное ведро, и поэтому будут возвращены неверные результаты.
Если вы пойдете по этому пути, либо будьте очень уверены, что дикты никогда не изменятся после того, как они были помещены в другой словарь, либо активно их предотвращайте (например, проверьте, что хеш никогда не меняется после первого позвоните на __hash__
и, если нет, сгенерируйте исключение.)