본문 바로가기
Tech-Pyhton

Python 자료형 SORT [List, Tuple, Dictionary]

by redcrow 2019. 3. 6.

파이썬 자료형의 정렬


1. iterable.sort()와 built-in sorted() 함수


list_a = [3,5,7,8,2,6]

print(list_a.sort())    # None                : list 의 sort는 정렬기능만하고 return이 없다

print(list_a)           # [2, 3, 5, 6, 7, 8]  : list_a가 정렬


list_b = [3,5,7,8,2,6]

print(sorted(list_b))   # [2, 3, 5, 6, 7, 8]  : sorted는 정렬된 값을 return한다

print(list_b)           # [3, 5, 7, 8, 2, 6]  : 원래 list_b는 변경되지 않는다.


tuple_a = (3,5,7,8,2,6)

#print(tuple_a.sort())  # Error. tuple은 imputable이므로 자체를 정렬하는 sort 기능이 없다


tuple_b = (3,5,7,8,2,6)

print(sorted(tuple_b))  # [2, 3, 5, 6, 7, 8]  :  list로 return 한다

print(tuple_b)          # (3, 5, 7, 8, 2, 6)  : sorted로 변경되지 않는다.



# List의 데이터 조작후 정렬. tuple도 동일

def ignore_case(input):

    return input.lower()


name = ['Lee', 'jin', 'Kim', 'park' ]


print(sorted(name, key=ignore_case))               # ['jin', 'Kim', 'Lee', 'park']

print(sorted(name, key=ignore_case, reverse=True)) # ['park', 'Lee', 'Kim', 'jin']



2. 특정키 기준으로 정렬


1) itemgetter 사용


from operator import itemgetter


score = [('Min',100), ('Kim',90), ('Lee',80), ('Park',85),('Song',85)]

score.sort(key=itemgetter(0))                     # [('Kim', 90), ('Lee', 80), ('Min', 100), ('Park', 85), ('Song', 85)] - 이름으로 정렬

print(score)

score.sort(key=itemgetter(1), reverse=True)       # [('Min', 100), ('Kim', 90), ('Park', 85), ('Song', 85), ('Lee', 80)] - 성적으로 정렬

print(score)

score.sort(key=itemgetter(1,0), reverse=True)     # [('Min', 100), ('Kim', 90), ('Song', 85), ('Park', 85), ('Lee', 80)] - 성적,이름으로 정렬

print(score)



2) Lamda 식 사용


score2 = [('Min',100), ('Kim',90), ('Lee',80), ('Park',85),('Song',85)]

score2.sort(key=lambda t:t[0])                         # [('Kim', 90), ('Lee', 80), ('Min', 100), ('Park', 85), ('Song', 85)] - 이름으로 정렬

print(score2)

score2.sort(key=lambda t:t[1], reverse=True)           # [('Min', 100), ('Kim', 90), ('Park', 85), ('Song', 85), ('Lee', 80)] - 성적으로 정렬

print(score2)

score2.sort(key=lambda t:(t[1],t[0]), reverse=True)    # [('Min', 100), ('Kim', 90), ('Song', 85), ('Park', 85), ('Lee', 80)] - 성적,이름으로 정렬

print(score2)

score2.sort(key=lambda t:(-t[1],t[0]), reverse=True)    # [('Lee', 80), ('Song', 85), ('Park', 85), ('Kim', 90), ('Min', 100)]- 성적은 오름차순,이름은 내림차순으로 정렬

print(score2)


# dictionary 정렬 . dictionary도 key는 immutable이므로 key sort 함수는 제공하지 않는다


score_dict = {'Min':100 , 'Kim':90, 'Lee':80 , 'Park':85 , 'Song':85}

temp = sorted(score_dict, key=lambda k: k[0])                            # ['Kim', 'Lee', 'Min', 'Park', 'Song']

print(temp)

temp = sorted(score_dict.items(), key=lambda k: k[0],reverse=True)       # [('Song', 85), ('Park', 85), ('Min', 100), ('Lee', 80), ('Kim', 90)]

print(temp)

temp = sorted(score_dict.items(), key=lambda k: k[1],reverse=True)       # [('Min', 100), ('Kim', 90), ('Park', 85), ('Song', 85), ('Lee', 80)]

print(temp)

temp = sorted(score_dict.items(), key=lambda k: (k[1],k[0]),reverse=True) # [('Min', 100), ('Kim', 90), ('Song', 85), ('Park', 85), ('Lee', 80)]

print(temp)

temp = sorted(score_dict.items(), key=lambda k: (-k[1],k[0]),reverse=True) # [('Lee', 80), ('Song', 85), ('Park', 85), ('Kim', 90), ('Min', 100)]

print(temp)




댓글