2017-04-11 10 views
0

나는 OrderedDicts의 목록을 가지고 있으며 중복되는 요소 목록에서 색인을 얻고 싶습니다. OrderedDicts 목록에서 중복 된 요소의 인덱스를 얻으려면 어떻게해야합니까?

>>> 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의 목록을 수행 할 수 있습니다 개념적으로 int의 목록이 기능은 다음 예와 같이 약간은 무엇입니까? 나는 OrderedDicts에이 기능을하려하면, 다음과 같은 오류가 발생 :

TypeError: unhashable type: 'OrderedDict' 

답변

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' 
+0

아, 매우 도움이됩니다. 해쉬 할 수없는 값 유형을 재귀 적으로 확인하는 팁을 주셔서 감사합니다. – BlandCorporation