擅长:python、mysql、java
<p>一种方法是对dict进行子类化并提供一个散列方法。即:</p>
<pre><code>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"
</code></pre>
<p>但是,请记住dict(或任何可变类型)不这样做的原因:将对象添加到哈希表后对其进行变异将更改哈希,这意味着dict现在将把它放在错误的bucket中,因此将返回不正确的结果。</p>
<p>如果您走这条路,要么非常确定dict放入另一个字典后不会更改,要么主动阻止它们(例如,检查hash在第一次调用<code>__hash__</code>之后不会更改,如果没有则抛出异常)</p>