<aside>
💬 lv0
, 정렬
각 주소가 담긴 배열과 우편번호 목록이 딕셔너리 형태로 주어질 때 에서 우편번호 오름차순 순서대로 주소를 정렬하는 코드를 작성해주세요.
입력 | 출력 |
---|---|
[['제주시 A동 한라산길 61', '제주시 B동 백록담길 63', '제주시 C동 사라봉길 31'], {'A동': 63007, 'B동': 63010, 'C동': 63002}] | ['제주시 C동 사라봉길 31', '제주시 A동 한라산길 61', '제주시 B동 백록담길 63'] |
['제주시 A동 한라산길 61', '제주시 B동 백록담길 63', '제주시 C동 사라봉길 31']에서 각각의 우편변호는 63007, 63010, 63002입니다. 따라서 우편 번호 오름차순으로 정렬을 하면 63002, 63007, 63010으로 정렬을 해야 하고, 이는 C동, B동, A동입니다. 따라서 결과 값은 ['제주시 C동 사라봉길 31', '제주시 A동 한라산길 61', '제주시 B동 백록담길 63']이 되어야 합니다.
</aside>
def solution(data):
return sorted(data[0], key=lambda x: data[1][x.split()[1]]) **#1 정렬 #2 split() 함수**
data
의 첫 번째 요소를 정렬
split() 함수
정렬 기준은 해당 요소를 분리한 후, 두 번째 리스트에서 해당 인덱스의 값을 사용해야 합니다.
split 함수
기본 형태: str.split(sep=None, maxsplit=-1)
개념: split()
함수는 문자열을 지정된 구분자(sep
)를 기준으로 나누어 리스트로 반환합니다. 구분자를 지정하지 않으면 공백을 기준으로 문자열을 나눕니다.
# split 함수를 사용하여 문자열 나누기
text = "apple,banana,orange"
fruits = text.split(',')
print(fruits) # 출력: ['apple', 'banana', 'orange']
def solution(data):
key2idx = {idx:val for idx, val in enumerate(data[1].values())} **#1 딕셔너리 컴프리헨션**
rearranged = sorted(key2idx.items(), key=lambda x: x[1]) **#2 리스트 정렬**
res = [data[0][i] for i, _ in rearranged]
return res
딕셔너리 컴프리헨션
data
의 두 번째 리스트를 기반으로 각 요소와 그에 해당하는 인덱스를 딕셔너리 형태로 저장합니다. 이때, 인덱스는 해당 요소의 값으로, 값은 해당 요소의 인덱스로 매핑됩니다. 이 과정에서 딕셔너리 컴프리헨션을 사용합니다.
리스트 정렬
딕셔너리를 생성한 후, 인덱스와 값을 서로 뒤집어 정렬하기 쉽게 만듭니다. 이를 위해 딕셔너리의 아이템을 튜플 형태로 뒤집어 리스트로 변환하고, 이 리스트를 sorted()
함수를 사용하여 값에 따라 정렬합니다. 여기서는 뒤집은 값이 정렬 기준이 됩니다.
enumerate 함수
기본 형태: enumerate(iterable, start=0)
개념: enumerate()
함수는 주어진 이터러블(iterable)의 각 요소에 대해 인덱스와 값을 반환하는 이터레이터(iterator)를 생성합니다. 이때, 인덱스는 기본적으로 0부터 시작하며, 선택적으로 시작값(start)을 지정할 수 있습니다.
# enumerate 함수를 사용하여 각 요소의 인덱스와 값을 출력하기
fruits = ['apple', 'banana', 'orange']
for index, fruit in enumerate(fruits):
print(index, fruit)
# 출력:
# 0 apple
# 1 banana
# 2 orange