각각 파일을 설명하는 사전 목록이 있습니다 (파일 형식, 파일 이름, 파일 크기, ... 및 파일의 전체 경로 [ 항상 고유 ]). 목표는 동일한 파일의 사본을 설명하는 하나의 사전 을 제외한 모든 사전 을 제외 하는 것입니다. 사본이 몇 개 있든 상관없이 파일 당 하나의 사전 (항목) 만 원합니다.
즉, 2 개 이상의 딕셔너리가 단일 키 ( 예 : 경로 )에서만 다른 경우-그중 하나만 남겨 둡니다.
예를 들어 다음은 소스 목록입니다.
src_list = [{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/'},
{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/mydir'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/mydir2'}]
결과는 다음과 같습니다.
dst_list = [{'filename': 'abc', 'filetype': '.txt', ... 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', ... 'path': 'C:/mydir2'}]
다른 사전을 사용 하여 "무시 된"키가 없는 목록의 사전을 실제 사전 에 매핑합니다 . 이렇게하면 각 종류 중 하나만 유지됩니다. 물론 딕셔너리는 해시 할 수 없으므로 대신 (정렬 된) 튜플을 사용해야합니다.
src_list = [{'filename': 'abc', 'filetype': '.txt', 'path': 'C:/'},
{'filename': 'abc', 'filetype': '.txt', 'path': 'C:/mydir'},
{'filename': 'def', 'filetype': '.zip', 'path': 'C:/'},
{'filename': 'def', 'filetype': '.zip', 'path': 'C:/mydir2'}]
ignored_keys = ["path"]
filtered = {tuple((k, d[k]) for k in sorted(d) if k not in ignored_keys): d for d in src_list}
dst_lst = list(filtered.values())
결과는 다음과 같습니다.
[{'path': 'C:/mydir', 'filetype': '.txt', 'filename': 'abc'},
{'path': 'C:/mydir2', 'filetype': '.zip', 'filename': 'def'}]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다