2013-10-01 4 views
0

아래 목록에서 중복 제거하고 싶지만 다음 화면에 표시 할 중복 목록을 유지하고 싶습니다. 이것은 CSV 파일에서 가져온, 그래서이 추가 된 어떤이 추가되지 않은 것을 사용자에게 표시 할 큰 것 등 "속는"Django - 목록 중복 제거 및 속임수 유지

[ 
    ['first_name', 'last_name', 'email'], 
    ['Danny', 'Lastnme', '[email protected]'], 
    ['Sally', 'Surname', '[email protected]'], 
    ['Sally', 'Surname', '[email protected]'], < -- Dupe 
    ['Sally', 'Surname', '[email protected]'], < -- Dupe 
    ['Chris', 'Lastnam', '[email protected]'], 
    ['Larry', 'Seconds', '[email protected]'], 
    ['Barry', 'Barrins', '[email protected]'], 
    ['Glenn', 'Melting', '[email protected]'], 
    ['Glenn', 'Melting', '[email protected]'], < -- Dupe 
] 

궁극적 인 결과는이 개 목록을 생성하는 것입니다, 좋은 이중 복사 결과 중 하나와 중복 사본 중 하나입니다. 고유

:

[ 
    ['first_name', 'last_name', 'email'], 
    ['Danny', 'Lastnme', '[email protected]'], 
    ['Sally', 'Surname', '[email protected]'], 
    ['Chris', 'Lastnam', '[email protected]'], 
    ['Larry', 'Seconds', '[email protected]'], 
    ['Barry', 'Barrins', '[email protected]'], 
    ['Glenn', 'Melting', '[email protected]'], 
] 

속는 :

[ 
    ['Sally', 'Surname', '[email protected]'], 
    ['Sally', 'Surname', '[email protected]'], 
    ['Glenn', 'Melting', '[email protected]'], 
] 
+0

정보가 중복되는 정보를 유지해야합니까, 아니면 "Sally 성이 여러 번 발견되었습니다"라고 말하기에 충분합니까? –

+0

@TimPietzcker 방금 질문을 업데이트했습니다. 완벽한 것은 고유 목록과 속임수 목록을 가져 오는 방법입니다. '{'unique ': [],'dupes ': []}'건배. –

답변

1

당신은 복사 속는의 반환 사전을 얻기 위해이 코드를 붙여 넣을 수와 빈도를 얻을 수 있습니다 순 쿠키 수 :

a = [ 
['first_name', 'last_name', 'email'], 
['Danny', 'Lastnme', '[email protected]'], 
['Sally', 'Surname', '[email protected]'], 
['Sally', 'Surname', '[email protected]'], 
['Sally', 'Surname', '[email protected]'], 
['Chris', 'Lastnam', '[email protected]'], 
['Larry', 'Seconds', '[email protected]'], 
['Barry', 'Barrins', '[email protected]'], 
['Glenn', 'Melting', '[email protected]'], 
['Glenn', 'Melting', '[email protected]'], 
] 

result = {} 

b = [tuple(x) for x in a[1:]] 
all_uniques = set(b) 
result['unique'] = [list(x) for x in list(all_uniques)] 

# To show which ones have duplicates use Mr Es solution: 

from collections import Counter 

t = Counter(b) 
dupes = [] 

for k, v in t.iteritems(): 
    if v > 1: 
     dupes.append(list(k)*(v-1)) 

result['dupes'] = dupes 

print(result) 
+0

완벽한, 감사합니다 Ewan. –

+0

@DannyBos 환영합니다. 항상 기꺼이 도와 드리겠습니다. :-) – Ewan

0

당신은

from collections import Counter 

t = Counter(tuple(x) for x in data[1:]) 

uniques = [list(k) for k, v in t.iteritems() if v == 1] 
dupes = [list(k) * (v-1) for k, v in t.iteritems() if v > 1] 
+0

이것들은 훌륭합니다, 감사합니다 mr-e와 @ tim-pietzcker. 중복에 관한 단 하나의 질문 만, 어떻게하면 (그것이 일반 사이트에있는 경우 실례가 될 수 있습니까?) 중복 된 것이 모두 중복 되어도 모든 중복을 나열합니다. 현재 위의 데이터 세트에는 3 개의 Dupes 만 표시됩니다. 무슨 뜻인지 알 겠어? –

+0

업데이트 된 답변보기 – YXD

+0

감사합니다 Mr E, 이것 역시 속임수를 사용합니다. 정말 감사합니다. –

1

시도해보십시오. 이것은 가장 쉬운 방법입니다.