사진찍는 프로그래머

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

개발/파이썬

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

리스트는 기본적으로 sort 라는 함수를 가지고 있지만 

딕셔너리는 sorted 의 힘을 빌려야 합니다. 

1
data2 = sorted(data.items(), key=lambda x: x[1][0], reverse=False)
cs

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를 이루는 투플의 첫번째 항목이 되는 식입니다.


리스트와 딕셔너리 정렬하기 예제 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import operator
 
 
print('----------------')
print('list sorting')
list = [10305020]
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['영희'= (809590)
data['철수'= (908070)
data['혜영'= (7010090)
 
print(data)
# sorted(data.items(), key=lambda x: x[1][0], reverse=False)
# sort(1, 2, 3) --> 1 번째 iteratable 파라미터가 하나씩 2번째 수식에 대입되어 돌아 간다.
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)
 
 
 
 
cs

예제에서 딕셔너리를

  • key, value 중 하나로 소팅하는 방법
  • value 가 tuple 일 경우 tuple 의 1,2,3 번째 항목으로 소팅하는 방법
  • value 가 또 다른 딕셔너리일 때 딕셔너리의 이름별로 소팅하는 방법

을 다뤘습니다.


결과

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
D:\dev\Anaconda3\python.exe D:/dev/prj/hello/sort.py
----------------
list sorting
[10305020]
[10203050]
----------------
simple dictionanry  sorting
{'영희'80'철수'90'혜영'70}
딕셔너리 - VALUE 로 소팅
[('혜영'70), ('영희'80), ('철수'90)]
딕셔너리 - KEY 로 소팅
[('영희'80), ('철수'90), ('혜영'70)]
----------------
tuple 배열로 이뤄진 딕서너리를 소팅 하기
{'영희': (809590), '철수': (908070), '혜영': (7010090)}
tuple 의 1번째 항목으로 소팅
[('혜영', (7010090)), ('영희', (809590)), ('철수', (908070))]
tuple 의 2번째 항목으로 소팅
[('철수', (908070)), ('영희', (809590)), ('혜영', (7010090))]
tuple 의 3번째 항목으로 소팅
[('철수', (908070)), ('영희', (809590)), ('혜영', (7010090))]
----------------
딕셔너리 배열로 이뤄진 딕셔너리를 정렬하기
{'영희': {'국어'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
 
cs




저작자 표시
신고