https://www.acmicpc.net/problem/10814
입력을 받고 {0:[21,"A"], 1:[20,"B"], 2:[21,"C"]} 이런 형태의 딕셔너리를 생성해서 value의 첫번째 요소로 오름차 정렬한 뒤, 값이 같을 경우 key로 오름차순 정렬 시도
n = int(input())
people = []
for _ in range(n):
age, name = input().split()
people.append([int(age), name])
adict = {} #딕셔너리 생성
for i in range(n):
adict[i] = people[i]
#딕셔너리 정렬
sorted_dict = list(sorted(adict.items(), key=lambda x: (x[1][0], x[0])))
answer = []
for i in range(n):
answer.append(sorted_dict[i][1])
for i in answer:
print(str(i[0]) + " " + i[1]) # 나이를 문자열로 변환하여 출력
딕셔너리를 굳이 생성하지 않고 리스트만 사용해서 정렬해도 된다 !!
Python의 sort() 함수나 sorted() 함수는 안정 정렬(stable sort)을 사용. 이는 정렬 기준이 동일할 경우, 원래의 입력 순서를 유지한다.
n=int(input())
people=[]
for _ in range(n):
age,name=input().split()
people.append([int(age),name])
people.sort(key = lambda x : x[0])
for i in people:
print(str(i[0])+ ' '+i[1])
my_dict = {'banana': 3, 'apple': 2, 'orange': 5}
sorted_dict = dict(sorted(my_dict.items()))
print(sorted_dict) # {'apple': 2, 'banana': 3, 'orange': 5}
sorted_by_value = dict(sorted(my_dict.items(), key=lambda item: item[1]))
튜플과 이중리스트 모두
sorted()함수나 리스트의sort()메서드로 정렬 가능
- 특정 요소를 기준으로 정렬하려면 key 매개변수를 lambda로 설정
- 여러 기준으로 정렬하려면 key=lambda x: (x[기준1], x[기준2]) 형태
- 내림차순으로 정렬하려면 reverse=True를 추가
data = [(3, "banana"), (1, "apple"), (2, "cherry")]
# 첫 번째 요소를 기준으로 정렬 (기본값)
sorted_data = sorted(data)
# 두 번째 요소(문자열)를 기준으로 정렬
sorted_data = sorted(data, key=lambda x: x[1])
# 첫 번째 요소를 기준으로 오름차순, 두 번째 요소를 기준으로 오름차순
sorted_data = sorted(data, key=lambda x: (x[0], x[1]))
sorted() 함수에 reverse=True 매개변수를 추가
sorted_data = sorted(data, reverse=True)
print(sorted_data)