파이썬 딕셔너리 정렬

에구마·2023년 9월 26일
0

Python

목록 보기
10/11

매번 찾게되고 오랜만에 쓰려면 알쏭달쏭한 딕셔너리 정렬 ... 최종 정리 땅땅땅

먼저, 딕셔너리 정렬엔 sorted()함수를 사용한다.
딕셔너리 정렬은 두가지가 있다. key값으로 정렬 , value값으로 정렬

🥝 key 값으로 정렬하기

dic= {'apple' : 23, 'tomato' : 11, 'banana' : 15, 'melon' : 20}

딕셔너리.keys() 는 딕셔너리의 key값들만 배열로 반환합니다

print(dic.keys())
# dict_keys(['apple', 'tomato', 'banana', 'melon'])

그래서 sorted(dic)를 하면 키값들만 가진 배열로 정렬합니다

print('sorted(dic)',sorted(dic))
# sorted(dic) ['apple', 'banana', 'melon', 'tomato']

// 딕녀서리.keys() 정렬과 같습니다
print('sorted(dic.keys())',sorted(dic.keys()))
# sorted(dic.keys()) ['apple', 'banana', 'melon', 'tomato']

sorted(딕셔너리.items())

print(sorted(dic.items()))
# ('apple', 23), ('banana', 15), ('melon', 20), ('tomato', 11)]

결과를 딕셔너리로 저장하려면 dict()에 넣어주면 된다

print(dict(sorted(dic.items())))
# {'apple': 23, 'banana': 15, 'melon': 20, 'tomato': 11}

역순(내림차순 정렬)

sorted(딕셔너리.items(), reverse = True)

print(sorted(dic.items(), reverse =True))
# [('tomato', 11), ('melon', 20), ('banana', 15), ('apple', 23)]



🥝 value 값으로 정렬하기

dic= {'apple' : 23, 'tomato' : 11, 'banana' : 15, 'melon' : 20}

딕셔너리.items()는 딕셔너리 각각의 키:벨류 값을 튜플형태로 변환하여 리스트로 반환한다

print(sorted(dic.items()))
# ('apple', 23), ('banana', 15), ('melon', 20), ('tomato', 11)]

이렇기 때문에 각각의 원소에서 [0]은 키값 [1]은 벨류가 된다. 따라서 다음과 같이 이용하여 정렬할 수 있다

sorted(딕셔너리.items(), key=lambda x:x[1])

print(sorted(dic.items(),key=lambda x : x[1] ))
# [('tomato', 11), ('banana', 15), ('melon', 20), ('apple', 23)]

value가 배열인 경우

배열 모든 원소대로 정렬한다. 즉, [0]값이 같다면 [1]로 비교 . . .

dic= {'apple' : [23,22], 'tomato' : [11,21], 'banana' : [11,24], 'melon' : [20,22]}

print(sorted(dic.items(), key=lambda x : x[1] ))
# [('tomato', [11, 21]), ('banana', [11, 24]), ('melon', [20, 22]), ('apple', [23, 22])]

정렬 기준 여러개

value값을 기준으로 정렬하고 같은 값에 대해선 key값으로 정렬하려면?

dic= {'apple' : 23,'tomato' : 11, 'banana' : 11, 'melon' : 20}

print(sorted(dic.items(), key=lambda x : (x[1],x[0]) ))
# [('apple', 23), ('melon', 20), ('tomato', 11), ('banana', 11)]

내림차순

  • reverse = True 이용
dic= {'apple' : 23, 'tomato' : 11, 'banana' : 11, 'melon' : 20}

print(sorted(dic.items(),key=lambda x : x[1] ,reverse=True))
# [('apple', 23), ('melon', 20), ('tomato', 11), ('banana', 11)]
  • value값이 숫자!인 경우엔 -로도 가능
dic= {'apple' : 23, 'tomato' : 11, 'banana' : 11, 'melon' : 20}

print(sorted(dic.items(),key=lambda x : -x[1]))
# [('apple', 23), ('melon', 20), ('tomato', 11), ('banana', 11)]

주의🤧

키값으로 정렬해서 정렬된 키값 배열만 필요할 sorted(딕셔너리)를 쓰기도 했다.
벨류값으로 정렬한 키값들 배열 을 얻는 것과는 다르다 !!
즉 아래 두개는 결과값이 다르다!!!

sorted(dic, key=lambda x: x[1])

이는, 벨류값의 정렬이 아니다. 키값의 [1]요소 즉 'abc'라면 'b'를 기준으로 정렬하는 것이다!!!

sorted(dic.items(), key=lambda x: x[1])

이것이 의도대로 벨류값으로 정렬된 키값들 배열 이다!

profile
코딩하는 고구마 🍠 Life begins at the end of your comfort zone

0개의 댓글