[파이썬] 리스트/딕셔너리 정렬하기

2017.12.11 22:07개발/파이썬

파이썬 리스트와 딕셔너리 간단한 정렬 예제입니다. (나중에 찾기 위해 기록)

리스트는 기본적으로 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

 

딕셔너리를 이용한 좀 더 다른 예제는 아래 글을 참고 하세요 ~

 

 

[파이썬] 딕셔너리를 이용한 카운팅, 정렬 예제

목적 숫자 리스트에서 발생하는 숫자의 횟수와 합을 저장 숫자, 발생 횟수, 합의 다양한 방식으로 딕셔너리 저장 샘플 코드 # 딕셔너리와 리스트 조합, 소팅 예제 dataSample = [5, 3, 3, 2, 1, 6, 10, 8, 7, 3,..

eslife.tistory.com