매번 찾게되고 오랜만에 쓰려면 알쏭달쏭한 딕셔너리 정렬 ... 최종 정리 땅땅땅
먼저, 딕셔너리 정렬엔 sorted()함수를 사용한다.
딕셔너리 정렬은 두가지가 있다. key값으로 정렬 , value값으로 정렬
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']
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)]
dic= {'apple' : 23, 'tomato' : 11, 'banana' : 15, 'melon' : 20}
딕셔너리.items()는 딕셔너리 각각의 키:벨류 값을 튜플형태로 변환하여 리스트로 반환한다
print(sorted(dic.items()))
# ('apple', 23), ('banana', 15), ('melon', 20), ('tomato', 11)]
이렇기 때문에 각각의 원소에서 [0]은 키값 [1]은 벨류가 된다. 따라서 다음과 같이 이용하여 정렬할 수 있다
print(sorted(dic.items(),key=lambda x : x[1] )) # [('tomato', 11), ('banana', 15), ('melon', 20), ('apple', 23)]
배열 모든 원소대로 정렬한다. 즉, [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)]
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])
이것이 의도대로 벨류값으로 정렬된 키값들 배열 이다!