如何获得 OrderedDicts 列表中重复元素的索引?

How can one get the indices of duplicate elements in a list of OrderedDicts?

我有一个 OrderedDicts 列表,我想获取该列表中重复元素的索引。从概念上讲,它有点像下面的示例,其中包含 ints:

的列表
>>> def indices_of_list_element_duplicates(x):
...     seen = set()
...     for index, element in enumerate(x):
...         if isinstance(element, list):
...             element = tuple(element)
...         if element not in seen:
...             seen.add(element)
...         else:
...             yield index
... 
>>> a = [1, 2, 3, 4, 5, 6, 1, 1, 9, 1]
>>> indices = [index for index in indices_of_list_element_duplicates(a)]
>>> indices
[6, 7, 9]

如何为 OrderedDicts 的列表完成同样的操作?当我尝试在 OrderedDicts 上使用此功能时,遇到以下错误:

TypeError: unhashable type: 'OrderedDict'
from collections import OrderedDict
# ...
if isinstance(element, OrderedDict):  # checking for type dict would be enough
    element = tuple(element.items())
# ...

这会将字典转换为元组的元组,而元组又可以成为集合的元素。之前,您试图将一个对象添加到 set,但它没有实现散列。

请注意,必须将给定的字典递归地限制为可哈希值类型。否则你会遇到类似的问题。

from collections import OrderedDict
d = OrderedDict(a=[1,2,3])
set().add(tuple(d.items()))
TypeError: unhashable type: 'list'