ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [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])]


    댓글