擅长:python、mysql、java
<p>如果结果中的顺序不重要,则可以使用集合将dict转换为冻结集来删除重复项:</p>
<pre><code>def remove_dict_duplicates(list_of_dicts):
"""
Remove duplicates.
"""
packed = set(((k, frozenset(v.items())) for elem in list_of_dicts for
k, v in elem.items()))
return [{k: dict(v)} for k, v in packed]
</code></pre>
<p>这假设最里面的dict的所有值都是散列的。在</p>
<p>放弃订单可能会加速大型列表。
例如,创建一个包含100000个元素的列表:</p>
^{pr2}$
<p>反复检查结果列表中的重复项需要相当长的时间:</p>
<pre><code>def remove_dupes(list_of_dicts):
"""Source: answer from wim
"""
list_of_unique_dicts = []
for dict_ in list_of_dicts
if dict_ not in list_of_unique_dicts:
list_of_unique_dicts.append(dict_)
return list_of_unique_dicts
%timeit remove_dupes(large_list
1 loop, best of 3: 2min 55s per loop
</code></pre>
<p>我的方法是,使用set更快:</p>
<pre><code>%timeit remove_dict_duplicates(large_list)
1 loop, best of 3: 590 ms per loop
</code></pre>