-
[Python] 리스트, 딕셔너리 sort(), sorted() 사용하기언어/파이썬 & 장고 2020. 2. 22. 17:21
보통 리스트 타입을 정렬할 때, .sort()로 간단하게 사용할 수 있습니다. 하지만 이 때, 2차원 배열 같은 특정 경우에서 비교하거나 딕셔너리의 값을 기준으로 정렬을 하고 싶다면 sort() 또는 sorted()에서 제공하는 key 옵션을 사용하여 정렬을 진행할 수 있습니다.
먼저 sorted()는 내장함수로 (이터러블 타입, key, reverse)와 같이 3개의 파라미터를 받으며 결과를 반환합니다. sort(key, reverse)는 리스트에서 제공해주는 메소드이며 딕셔너리에서는 볼 수 없습니다.
2차원 배열 정렬
먼저 아래와 같이 2차원 배열이 있다고 가정하고 내부 배열의 각 첫 번째 값으로 정렬을 하는 예제입니다.
target = [[1, 2], [3, 1], [2, 6], [4, 5], [3, 3]] # 2 번째 인자로 비교를 하고 싶다면 x[0] 대신 x[1]을 입력 target.sort(key=lambda x:x[0]) print(target) # [[1, 2], [2, 6], [3, 1], [3, 3], [4, 5]]
만약 위 처럼 1개의 조건이 아니라 첫 번째 값이 동일하다면 두 번째 값을 비교하여 내림차순으로 정렬하고 싶을 때, 아래와 같이 작성합니다.
target = [[1, 2], [3, 1], [2, 6], [4, 5], [3, 3]] target.sort(key=lambda x: (x[0], -x[1])) print(target) # [[1, 2], [2, 6], [3, 3], [3, 1], [4, 5]]
딕셔너리 정렬
딕셔너리의 경우, 딕셔너리에서 sort()를 제공하지 않으므로 내장함수인 sorted()를 사용해야 합니다. 먼저 첫 번째 예제는 딕셔너리의 키 값을 기준으로 정렬한 예제입니다.
target = { 1: 2, 3: 1, 2: 6, 4: 5, 5: 3 } # 만약 key값으로 비교하려면 x[1]로 진행 a = sorted(target.items(), key=lambda x:x[0]) print(a) # [(1, 2), (2, 6), (3, 1), (4, 5), (5, 3)]
딕셔너리.items()로 하면 [(key, value)] 형태로 반환이 됩니다.
만약, value에 리스트가 있어서 위 2차원 배열의 두 번째 예제와 같이 정렬을 하고 싶다면 아래와 같이 진행하면 됩니다.
target = { 1: [1, 2], 3: [3, 1], 2: [2, 6], 4: [4, 5], 5: [3, 3] } a = sorted(target.items(), key=lambda x:(x[1][0], -x[1][1])) print(a) # [(1, [1, 2]), (2, [2, 6]), (5, [3, 3]), (3, [3, 1]), (4, [4, 5])]