저번에 웹 크롤링 및 이미지 유사도 비교에 대해서 공부를 해 봤는데요.
폴더를 0, 1, 2 ... 등으로 관리했습니다.
폴더를 리스트화하고
각 폴더를 순회하면서 폴더에 들어 있는 사진들을 각각 비교하게 만들었다가 알게 된 사실이 하나 있습니다.
폴더를 리스트화할 때 사전순으로 정렬한다는 사실인데요.
이 폴더를 0 ~ 12까지 있다고 할 때
순회하는 순서가 0, 1, 11, 12, 2, 3, 4, ... 이라는 것입니다.
만약 순회하는 순서를 0, 1, 2, 3, ...으로 하여 마지막에 제일 큰 숫자가 오도록 하고 싶을 때 어떻게 정렬하면 좋을지 고민해 봤습니다.
고민하는 데에는 아주 오랜 시간이 걸렸지만 코드는 그리 길지 않습니다 ..
자동으로 폴더를 생성해 줄 때

함수들만을 이용해 재정렬할 경우는 다음과 같습니다.

디렉터리 리스트를 int로 매핑해 준 다음 다시 list로 감싸고 sorted 함수로 반환합니다.
참고로 list 객체의 sort 함수는 정렬만 할 뿐 반환값이 없습니다. sorted 함수는 정렬 후 반환까지 해 줍니다.
그렇기에 다시 map 함수를 사용해서 map(str, sorted(...))처럼 감쌀 수 있습니다.
int로 정렬된 리스트를 다시 str로 매핑해 준 다음 리스트로 감싸면 최종적으로 정리가 된 것을 확인할 수 있습니다
그런데 함수만을 이용해 전부 처리한다면 간단히 해결할 수 있겠지만 ..
함수를 모르고 있을 경우 어떻게 정렬하면 좋을지 고민을 꽤 꽤 많이 하다가 힌트를 얻어서 해결해 봤습니다 ..
다음과 같습니다.

딕셔너리 자료형을 이용하겠습니다.
dir_list에 담긴 폴더의 자릿수를 저장합니다.
예를 들어 0 ~ 9는 cnt가 1일 것이고
11 ~ 99는 cnt가 2일 것입니다.
그런 다음 처음 만들어 둔 attribute_dict에 한 자릿수 키가 없으면 만들어서 각 자릿수에 해당하는 dir들을 전부 넣어 줍니다.
그 다음 정렬시켜서 dict 함수로 감싼 다음 attribute_dict에 저장합니다.
다시 반복문을 사용해서 key와 value를 받아 정렬합니다.
잘 정렬된 요소들을 담을 리스트를 만들고
담아 주면 끝입니다.
힌트를 꽤 많이 얻어서 작성하였지만 이렇게 해결할 수 있다는 게 크게 와닿는 것 같습니다 ..