본문 바로가기

카테고리 없음

딕셔너리로 이루어진 리스트를 딕셔너리 안에 값을 기준으로 정렬하는 방법

자료를 수집하다 보면 딕셔너리(dictionary)로 구성된 리스트(list)를 작성하게 되는 경우가 많이 있습니다. 예를 들면 아래와 같은 형태입니다. 여러 방면으로 사용하기 편한 형태라고 생각합니다. 

 

[{'title': 'CLI for ordering Dominos pizza', 'upvote': 265}, 
 {'title': '100+ LeetCode solutions in Go', 'upvote': 189},
 {'title': 'Database basics: writing a SQL database from scratch in Go', 'upvote': 240},
 {'title': 'Generics in Go - How They Work and How to Play With Them', 'upvote': 248}]

 

어떻게 하면 위와 같이 생긴 리스트를 딕셔너리 내부의 특정 key의 value 값을 기준으로 정렬할 수 있을지 알아보겠습니다.

 

파이썬 내장 함수 sorted를 사용하여 정렬하기 

내장 함수인 sorted를 이용하면 원하는 정렬을 할 수 있습니다. 

- iterable에는 list, str, dict 등을 넣을 수 있습니다. 

- key에는 각 요소를 비교하는 데 사용될 기준을 정하는 함수를 넣을 수 있습니다. 이때 함수는 인자 하나를 받으며 정렬 기준이 될 키를 반환하는 함수여야 합니다.

- reverse의 값이 False라면 오름차순으로 True라면 내림차순으로 정렬합니다.

 

sorted(iterable, key=None, reverse=False)

 

앞에서 보았던 데이터를 upvote의 수를 기준으로 내림차순 정렬했습니다. sorted 함수는 정렬된 새로운 리스트를 반환하기 때문에 결과를 변수에 할당했습니다.

 

data = [{'title': 'CLI for ordering Dominos pizza', 'upvote': 265}, 
        {'title': '100+ LeetCode solutions in Go', 'upvote': 189},
        {'title': 'Database basics: writing a SQL database from scratch in Go', 'upvote': 240},
        {'title': 'Generics in Go - How They Work and How to Play With Them', 'upvote': 248}]
        
result = sorted(data, key=lambda x:x['upvote'], reverse=True)
result

"""
[{'title': 'CLI for ordering Dominos pizza', 'upvote': 265},
 {'title': 'Generics in Go - How They Work and How to Play With Them',
  'upvote': 248},
 {'title': 'Database basics: writing a SQL database from scratch in Go',
  'upvote': 240},
 {'title': '100+ LeetCode solutions in Go', 'upvote': 189}]
"""

 

 

이번에는 리스트 안에 튜플이 들어있을 경우입니다. 숫자를 기준으로 오름차순 정렬했습니다.

 

data = [('amy', 29, 'mechanic'), ('john', 24, 'student'), ('jessie', 34, 'programmer')]

result = sorted(data, key=lambda x:x[1], reverse=False)
result

"""
[('john', 24, 'student'),
 ('amy', 29, 'mechanic'),
 ('jessie', 34, 'programmer')]
"""

 

 

- 이 글은 아나콘다(Anaconda3)가 설치된  주피터 노트북에서 작성되었습니다.