我有一个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'
答案 0 :(得分:1)
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'