如何获得 OrderedDicts 列表中重复元素的索引?
How can one get the indices of duplicate elements in a list of OrderedDicts?
我有一个 OrderedDicts
列表,我想获取该列表中重复元素的索引。从概念上讲,它有点像下面的示例,其中包含 int
s:
的列表
>>> 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'
我有一个 OrderedDicts
列表,我想获取该列表中重复元素的索引。从概念上讲,它有点像下面的示例,其中包含 int
s:
>>> 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'