보통 리스트 타입을 정렬할 때, .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])]