[Python] 딕셔너리 리스트 Key 순서 정렬 (sort list of dictionary)

반응형

Python Logo

 

이번엔 딕셔너리를 요소로 가지고 있는 리스트가 있을 때, 해당 리스트를 딕셔너리의 key값을 기준으로 정렬하는 방법에 대해 알아보겠습니다.

Contents

     

    *전체 코드

    li = [{'name':'Ace', 'age':87}, {'name':'Bella', 'age':10}]
    
    # name을 기준으로 사전순 정렬
    print(sorted(li , key= lambda x: x['name'])) 
    ## Output : [{'name': 'Ace', 'age': 87}, {'name': 'Bella', 'age': 10}]
    
    # name을 기준으로 사전 역순으로 정렬
    print(sorted(li , key= lambda x: x['name'], reverse=True)) 
    ## Output : [{'name': 'Ace', 'age': 87}, {'name': 'Bella', 'age': 10}]
    
    
    from operator import itemgetter
    # itemgetter이용 name 기준으로 사전순 정렬
    print(sorted(li, key=itemgetter('name')))
    ## Output : [{'name': 'Ace', 'age': 87}, {'name': 'Bella', 'age': 10}]
    
    # age 기준으로 사전순 정렬 (숫자도 가능)
    print(sorted(li, key=itemgetter('age')))
    ## Output : [{'name': 'Bella', 'age': 10}, {'name': 'Ace', 'age': 87}]

     

    사용할 리스트 정의

    li = [{'name':'Ace', 'age':87}, {'name':'Bella', 'age':10}]

    리스트에 2개의 딕셔너리가 들어있습니다. 각 딕셔너리는 name과 age라는 key값을 가지고 있습니다.

     

    1. lambda 함수 이용 정렬

    1) lambda 함수란?

    lambda함수는 기초적인 연산을 하는 간단한 함수를 만들 때 쓰입니다. lambda 인자: 인자의 연산과 같은 방식으로 쓰입니다. 인자를 입력받아 인자의 연산을 return으로 주는 함수로 보면 되겠습니다. lambda를 처음 접하신 분이라면, 바로 이해되지 않는 게 당연합니다. 아래의 게시글을 읽어본다면, 조금 더 쉽게 이해할 수 있습니다.

    [Python] map 함수란? 활용법(lambda)

     

    2) lambda 함수 이용 - 사전 순 정렬

    sorted(li , key= lambda x: x['name'])

    sorted함수에 li를 인자로 넣고, key에 lambda함수를 넣습니다. 여기서 key는 sorted함수가 제공하는 매개변수로, custom function을 넣어주면, 그 함수를 기준으로 정렬해줍니다. 여기선 x에 대해 x['name']을 기준으로 정렬하도록 lambda를 이용해 custom function을 만들었습니다. 즉, 각 딕셔너리에 대해 name 키의 값을 기준으로 정렬합니다.

    * 출력

    key= lambda x: x['name']

     

    3) lambda 함수 이용 - 사전 역순 정렬

    sorted(li , key= lambda x: x['name'], reverse=True)

    위와 모두 동일한 상태에서, sorted함수에 reverse=True를 추가했습니다. 사전 역순으로 정렬하도록 하는 기능입니다. reverse 매개변수의 기본값은 False이며, 사전 순 정렬을 의미합니다.

    *출력

    사전 역순

     

    2. itemgetter이용 정렬

    1) itemgetter 란?

    파이썬 내장 라이브러리인 operator의 메서드 중 하나로, 주로 정렬에 쓰이는 함수입니다. 말 그대로 item을 얻어다 주는 함수입니다. itemgetter의 인자로 key값을 주면, 딕셔너리에 대해 해당 key의 value를 얻어다 줍니다.

     

    2) itemgetter 이용 - 사전 순 정렬

    from operator import itemgetter
    sorted(li, key=itemgetter('name'))

    sorted함수의 key 매개변수에 itemgetter('name')을 넣어줍니다. 위와 마찬가지로, 리스트 안의 각 딕셔너리에 대해, 'name'의 value를 기준으로 사전 순으로 정렬해 줍니다. lambda보다 더 짧게 쓸 수 있으며, 성능 역시 약간 더 빠릅니다.

    * 출력

    itemgetter 사용

     

    *성능 비교

    리스트 안에 딕셔너리가 약 2백만 개 정도 있을 때, lambda를 이용한 정렬은 약 177ms가 걸리지만, itemgetter를 이용한 경우 약 149ms가 걸리는 것으로 측정되었습니다. (환경에 따라 다를 수 있습니다.)

    comparing performance

     

    감사합니다.

    오늘도 발전하는 여러분을 응원합니다!

    다음에 더 유익하고 재미있는 글로 찾아오겠습니다.

     

     

    * 위 실습 코드와 실행결과는 아래 링크에서 보실 수 있습니다.

    https://github.com/netsus/python_practice/blob/master/220325_python_sorting_list_of_dictionaries.ipynb

     

    GitHub - netsus/python_practice: basic python course

    basic python course. Contribute to netsus/python_practice development by creating an account on GitHub.

    github.com

     

    Reference)
    https://stackoverflow.com/questions/72899/how-do-i-sort-a-list-of-dictionaries-by-a-value-of-the-dictionary

     

    반응형

    댓글

    Designed by JB FACTORY