파이썬 리스트와 딕셔너리 간단한 정렬 예제입니다. (나중에 찾기 위해 기록)
리스트는 기본적으로 sort 라는 함수를 가지고 있지만
딕셔너리는 sorted 의 힘을 빌려야 합니다.
data2 = sorted(data.items(), key=lambda x: x[1][0], reverse=False)
sorted(1st pmt, 2nd pmt, 역순 여부)
1st 인수에 있는 항목들을 하나씩 꺼내서 두 번째 lambda 함수에 파라미터 x 로 대입하고 정렬하는 방식입니다.
x[1][0] --> data.items[1][0] 이 되고 아래 예제에서 data.items[1] 은 (key: value) 의 value 에 해당하고 data.items[1][0] 은 결국 value를 이루는 투플의 첫번째 항목이 되는 식입니다.
단, sorted 함수의 결과는 원하는 순서로 정렬된 list 입니다
리스트와 딕셔너리 정렬하기 예제
import operator
print('----------------')
print('list sorting')
list = [10, 30, 50, 20]
print(list)
list2 = list
list.sort()
print(list2)
print('----------------')
print('simple dictionanry sorting')
dic1 = {'영희' : 80 , '철수' : 90, '혜영' : 70}
print(dic1)
print('딕셔너리 - VALUE 로 소팅')
dic2 = sorted(dic1.items(), key=operator.itemgetter(1))
print(dic2)
print('딕셔너리 - KEY 로 소팅')
dic2 = sorted(dic1.items(), key=operator.itemgetter(0))
print(dic2)
print('----------------')
print('tuple 배열로 이뤄진 딕서너리를 소팅 하기')
data = {}
data['영희'] = (80, 95, 90)
data['철수'] = (90, 80, 70)
data['혜영'] = (70, 100, 90)
print(data)
# sorted(data.items(), key=lambda x: x[1][0], reverse=False)
# sort(1, 2, 3) --> 1 번째 iteratable 파라미터가 하나씩 2번째 수식에 대입되어 돌아 간다.
# key=lambda x: x[0] 은 key 로 소팅을 의미 x[1] 은 데이터를 의미 x[1][0] 은 데이터 중에 0번째 항목
print('tuple 의 1번째 항목으로 소팅')
data2 = sorted(data.items(), key=lambda x: x[1][0], reverse=False)
print(data2)
print('tuple 의 2번째 항목으로 소팅')
data2 = sorted(data.items(), key=lambda x: x[1][1], reverse=False)
print(data2)
print('tuple 의 3번째 항목으로 소팅')
data2 = sorted(data.items(), key=lambda x: x[1][2], reverse=False)
print(data2)
print('----------------')
print('딕셔너리 배열로 이뤄진 딕셔너리를 정렬하기')
data['영희'] = {'국어': 80, '수학': 95, '영어': 80}
data['철수'] = {'국어': 90, '수학': 80, '영어': 70}
data['혜영'] = {'국어': 70, '수학': 100, '영어': 90}
print(data)
print('국어 성적으로 소팅')
data2 = sorted(data.items(), key=lambda x: x[1]['국어'], reverse=False)
print(data2)
print('영어 성적으로 소팅')
data2 = sorted(data.items(), key=lambda x: x[1]['영어'], reverse=False)
print(data2)
예제에서 딕셔너리를
- key, value 중 하나로 소팅하는 방법
- value 가 tuple 일 경우 tuple 의 1,2,3 번째 항목으로 소팅하는 방법
- value 가 또 다른 딕셔너리일 때 딕셔너리의 이름별로 소팅하는 방법
을 다뤘습니다.
결과
D:\dev\Anaconda3\python.exe D:/dev/prj/hello/sort.py
----------------
list sorting
[10, 30, 50, 20]
[10, 20, 30, 50]
----------------
simple dictionanry sorting
{'영희': 80, '철수': 90, '혜영': 70}
딕셔너리 - VALUE 로 소팅
[('혜영', 70), ('영희', 80), ('철수', 90)]
딕셔너리 - KEY 로 소팅
[('영희', 80), ('철수', 90), ('혜영', 70)]
----------------
tuple 배열로 이뤄진 딕서너리를 소팅 하기
{'영희': (80, 95, 90), '철수': (90, 80, 70), '혜영': (70, 100, 90)}
tuple 의 1번째 항목으로 소팅
[('혜영', (70, 100, 90)), ('영희', (80, 95, 90)), ('철수', (90, 80, 70))]
tuple 의 2번째 항목으로 소팅
[('철수', (90, 80, 70)), ('영희', (80, 95, 90)), ('혜영', (70, 100, 90))]
tuple 의 3번째 항목으로 소팅
[('철수', (90, 80, 70)), ('영희', (80, 95, 90)), ('혜영', (70, 100, 90))]
----------------
딕셔너리 배열로 이뤄진 딕셔너리를 정렬하기
{'영희': {'국어': 80, '수학': 95, '영어': 80}, '철수': {'국어': 90, '수학': 80, '영어': 70}, '혜영': {'국어': 70, '수학': 100, '영어': 90}}
국어 성적으로 소팅
[('혜영', {'국어': 70, '수학': 100, '영어': 90}), ('영희', {'국어': 80, '수학': 95, '영어': 80}), ('철수', {'국어': 90, '수학': 80, '영어': 70})]
영어 성적으로 소팅
[('철수', {'국어': 90, '수학': 80, '영어': 70}), ('영희', {'국어': 80, '수학': 95, '영어': 80}), ('혜영', {'국어': 70, '수학': 100, '영어': 90})]
Process finished with exit code 0
딕셔너리를 이용한 좀 더 다른 예제는 아래 글을 참고 하세요 ~
'개발 > 파이썬' 카테고리의 다른 글
[파이썬] 지정한 폴더/확장자에서 텍스트 일괄 변경 (0) | 2018.02.06 |
---|---|
[파이썬] 파일 옮기기 (0) | 2017.12.30 |
[파이썬] 폴더 크기 구하기 (0) | 2017.12.30 |
[파이썬] Creon Plus 를 이용해서 KOSPI200 종목 시세 가져오기 (0) | 2017.10.15 |
[파이썬] 안드로이드 프로젝트에서 자바 클래스 레퍼런스 카운트 구하기 (0) | 2017.10.14 |
[파이썬] 폴더 명 일괄 변경 예제 (0) | 2017.10.11 |
댓글