자료를 수집하다 보면 딕셔너리(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)가 설치된 주피터 노트북에서 작성되었습니다.