<aside>
💬 lv0
, 요구사항 구현
라이캣은 도서관 사서로 일하게 되었습니다. 도서관에 있는 책들의 제목과 해당 책들의 발행 연도가 딕셔너리 형태로 주어집니다. 라이캣을 도와 주어진 책들을 발행 연도가 오래된 순서대로 정렬하는 코드를 작성해주세요. 발행 연도가 같은 경우에는 제목의 사전순으로 정렬하세요.
입력 | 출력 |
---|---|
[['Moby Dick', 'To Kill a Mockingbird', '1984'], {'Moby Dick': 1851, 'To Kill a Mockingbird': 1960, '1984': 1949}] | ['Moby Dick', '1984', 'To Kill a Mockingbird'] |
입력으로 주어진 책들의 발행 연도는 다음과 같습니다: 'Moby Dick' - 1851, 'To Kill a Mockingbird' - 1960, '1984' - 1949. 이에 따라 발행 연도가 오래된 순서대로 정렬하면 'Moby Dick', '1984', 'To Kill a Mockingbird' 순이 됩니다.
</aside>
def solution(data): **#1 함수 정의**
books, publish_years = data **#2 언패킹**
return sorted(books, key=lambda book: (publish_years[book], book)) **#3 key값 정렬**
함수 정의
함수는 하나의 인자 data
를 받습니다. data
는 정렬할 도서의 제목 리스트와 제목과 연도가 함께 표기된 딕셔너리로 구성되어 있습니다.
언패킹
입력받은 data
를 언패킹하여 책 제목과 발행 연도로 분리합니다.
key값 정렬
언패킹된 data
를 기반으로 lambda
함수를 key
값으로 활용하여 정렬합니다. publish_years[book]
은 딕셔너리에서 제목으로 찾은 발행 연도로 우선 정렬한다는 의미입니다. 만약, 발행 연도가 같다면, 제목을 사전 순으로 정렬합니다. sorted
함수를 사용하였습니다.
결과 반환
최종적으로 정렬된 제목 리스트가 함수의 반환 값으로 지정됩니다.
언패킹
기본 형태: 변수 1, 변수 2 = 원본 데이터
(길이는 2로 가정)
개념: 시퀀스 객체(리스트, 튜플, 문자열 등)의 요소를 개별 변수로 할당하는 과정을 말합니다.
# 언패킹 사용
numbers = [1, 2, 3]
a, b, c = numbers
print(a) # 1
print(b) # 2
print(c) # 3
def solution(data): **#1 함수 정의**
return sorted(data[0], key = lambda x: (data[1].get(x), x)) **#2 key값 정렬**
함수 정의
함수는 하나의 인자 data
를 받습니다. data
는 정렬할 도서의 제목 리스트와 제목과 연도가 함께 표기된 딕셔너리로 구성되어 있습니다.
정렬 대상 및 기준 설정
data
에서 제목 리스트인 앞부분(data[0]
)을 정렬하며 그 기준은 딕셔너리 형태인 뒷부분(data[1])을 따르고 있습니다.
key 값 정렬
lambda
함수는 딕셔너리에서 제목 리스트의 원소들을 get
메서드로 찾고 있습니다. 만약, 발행 연도가 같다면, 제목을 사전 순으로 정렬합니다. sorted
함수를 사용하였습니다.
결과 반환
최종적으로 정렬된 제목 리스트가 함수의 반환 값으로 지정됩니다.