擅长:python、mysql、java
<p>使用<code>list(set(your_list_of_dicts))</code>的最简单方法行不通,因为Python字典是可变的,不是散列的(也就是说,它们不实现<code>__hash__</code>)。这是因为Python不能保证字典的哈希在插入<code>set</code>或<code>dict</code>之后不会改变。在</p>
<p>但是,在您的例子中,由于您(似乎根本没有)修改数据,您可以计算自己的哈希,并将其与字典一起使用,以相对容易地找到唯一的JSON对象,而不必对每个字典与其他字典进行完全的递归比较。在</p>
<p>首先,我们需要一个函数来计算字典的哈希值。与其尝试构建自己的哈希函数,不如使用<a href="http://docs.python.org/library/hashlib.html" rel="nofollow">^{<cd5>}</a>中的一个内置函数:</p>
<pre><code>def dict_hash(d):
out = hashlib.md5()
for key, value in d.iteritems():
out.update(unicode(key))
out.update(unicode(value))
return out.hexdigest()
</code></pre>
<p>(请注意,对于每个返回唯一值的值,这依赖于<code>unicode(...)</code>,如果字典中有自定义类,<code>__unicode__</code>返回类似“MyClass instance”的值,则这将失败或需要修改。此外,在您的示例中,您的字典是扁平的,但我将把它留给读者作为练习,如何扩展此解决方案以使用包含其他dict或列表的字典。)</p>
<p>由于<code>dict_hash</code>返回一个不可变的字符串,您现在可以使用字典来查找唯一的元素:</p>
^{pr2}$