Python

[파이썬] 딕셔너리(dictionary) key(키) 또는 value(값) 순으로 정렬하기

bornsoon 2024. 9. 16. 21:25
dict = {'apple': 3, 'banana': 2, 'cherry': 1}

# key 순으로 정렬
sorted_d = sorted(dict.items())
(<==> sorted_d = sorted(dict.items(), key=lambda x: x[0]) )

print(sorted_d)
# [('apple', 3), ('banana', 2), ('cherry', 1)]



# value 순으로 정렬
sorted_d = sorted(dict.items(), key=lambda x: x[1])

print(sorted_d)
# [('cherry', 1), ('banana', 2), ('apple', 3)]


# 내림차순으로 정렬 (숫자만 가능! str은 안됨!)
(<==> sorted_d = sorted(dict.items(), key=lambda x: -x[1]) )

print(sorted_d)
# [('apple', 3), ('banana', 2), ('cherry', 1)]


# key에 요소를 리스트 혹은 튜플로 줄 때
# 튜플 안에서 앞의 값이 같으면 뒤의 값을 기준으로 정렬한다. 

# 첫 번째 원소를 오름차순, 첫 번째 원소가 같으면
# 두 번째 원소(숫자)를 기준으로 내림차순 정렬
dict = {'apple': 3, 'banana': 2, 'orange': 1, 'cherry': 1}
sorted_d = sorted(dict.items(), key=lambda x: (-x[1], x[0]))
# sorted_d = sorted(dict.items(), key=lambda x: [-x[1], x[0]])

# x[1]를 오름차순으로 정렬하고 x[1]의 값이 같으면 x[0]를 기준으로 내림차순 정렬
print(sorted_d)
# [('apple', 3), ('banana', 2), ('cherry', 1), ('orange', 1)]

 

(cf. operator 모듈의 itemgetter() 함수를 사용하는 방법도 있다.)

 

 

+ 문자열 또는 절대값을 기준으로 정렬하는 방법도 있다. (feat. key옵션)

# 문자열 길이순으로 정렬(key=len)
lst = ['apple', 'strawberry', 'cherry', 'blueberry']

sorted_l = sorted(lst, key=len)
print(sorted_l)
# ['apple', 'cherry', 'blueberry', 'strawberry']


# 절대값으로 정렬(key=abs)
lst = [-6, 10, 0, 3, -7]

sorted_l = sorted(lst, key=abs)
print(sorted_l)
# [0, 3, -6, -7, 10]

# ('key=abs'없을 경우: [-7, -6, 0, 3, 10])
728x90