2013-03-14 5 views
1

값이 중복 된 열이 있습니다.OpenRefine 자이 썬 목록에서 중복 항목 제거

VMS5796,VMS5650,VMS5650,CSL,VMA5216,CSL,VMA5113 

제가 적용 있어요, 여기에 코드입니다 (에 오류가 원래의 유지로 설정) 중복을 제거 자이 썬을 사용하여 변환 :

미리보기에서 작동하지만,하지
return list(set(value.split(","))) 

열에 적용됩니다. 내가 도대체 ​​뭘 잘못하고있는 겁니까?

답변

1

Map 함수는 Python/Jython에서 매우 강력하고 사용되지 않는 함수입니다. 이 코드가 내부적으로 무엇을하는지는 분명치 않지만 아마도 문자열 유형으로 '매핑'되어야하는 열 셀의 값 목록 또는 배열에서 수백만 비트의 값을 처리하는 것이 매우 빠릅니다. 아마 다른있다 등의 쉼표 ','

deduped_list = list(set(value.split(","))) 
return ', '.join(map(str, deduped_list)) 

로 분리 문자, 조금이라도 빨리 이것보다 변화,하지만 당신이 올바른 방향으로 가야한다.

흥미롭게도 OpenRefine과 같은 EVAL에서 받아 들일 수있는 '인쇄 가능한 표현'repr (객체)을 얻을 수 있으며, 방금 알아 낸 값의 표현도 볼 수 있습니다. 이 대답을 더 깊이 연구하고 있습니다.

deduped_list = list(set(value.split(","))) 
return ', '.join(map(repr, deduped_list)) 
+1

'', '. join (set (value.split (",")))'value'가 문자열이면 작동해야합니다. – jfs

+0

repr이 원했던 것처럼 작동하지 않아 람다 (lambda) 함수를 사용하여 내가 원한 아스키 (ascii)로 문자열을 인코딩했습니다. 귀하의 솔루션은 일하고지도(), 감사합니다. – Phil

0

미리보기는 표시하기 위해 암시 적으로 형식을 지정합니다. 표현식은 셀에 저장할 수없는 배열을 반환하므로 문자열 형식을 얻으려면 끝 부분에 .join (',')을 붙이십시오.

+1

자이 썬의 표현 언어 Tom과 같은 방식으로하면 그는 '오류 : null'과 출력을 얻지 못할 것이다. –

+0

그걸 정확히 테스트했을 때 그랬습니다. – Phil

+0

그래, 내 잘못이야. 나는 이것이 디폴트 GREL보다는 Python/Jython이라는 사실을 놓쳤다. –