본문 바로가기
컴퓨터/Python

[python] 파이썬 사전 딕셔너리 값 value 로 정렬하는 방법 - lambda 식 응용 - 파이썬으로 단어 수 세기, 텍스트에서 가장 많이 출현한 단어 세기

by HanJoohyun 2018. 7. 5.
반응형

 

 

 

안녕하세요 한주현입니다.

 

오늘은 python에서 딕셔너리의 값으로 정렬하는 방법에 대해 알아보겠습니다.




들어가며


python 의 사전형은 순서가 없는 자료형입니다.


그런데 가끔 우리는 사전의 값 순서대로 정렬하고 싶을 때가 있지요..ㅋㅋ


예를 들어, 텍스트에서 단어 수를 사전형으로 세어 본 다음 어떠한 단어가 가장 많이 나왔는지 알고 싶을 때


값으로 정렬하게 된다면 가장 많이 출현한 단어를 알 수 있을 겁니다.




Dictionary 값 value 로 정렬하기


사전의 value 값으로 정렬하는 방법은 sorted 함수를 사용합니다.


sorted 함수는 key 를 받을 수 있는데, 여기서 lambda 식을 사용하여 튜플에서 1 번째 index를 기준으로 정렬하는 것 이지요


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>>> d = {'A'3'C'1'G'5'T'2}
 
>>> d
{'A'3'C'1'G'5'T'2}
 
## d.items() 를 하여 각 key, value 가 tuple로 들어있는 
## 리스트 (dict_items 객체) 로 만듭니다
>>> d.items()
dict_items([('A'3), ('C'1), ('G'5), ('T'2)])
 
## dict_items 객체를 lambda 식을 활용하여 정렬을 하는 거지요 
 
## 오름차순 정렬
>>> sorted(d.items(), key=lambda x: x[1])
[('C'1), ('T'2), ('A'3), ('G'5)]
 
## 내림차순 정렬
>>> sorted(d.items(), key=lambda x: x[1], reverse=True)
[('G'5), ('A'3), ('T'2), ('C'1)]
 
cs




텍스트에서 가장 많이 출현한 단어 수 세기


아래 데이터는 세익스피어의 햄릿입니다 ..ㅋㅋ


https://raw.githubusercontent.com/KennethJHan/blogdata/master/hamlet.txt


데이터를 받으시고 햄릿에서 가장 많이 출현한 단어를 찾아봅시다 ㅎㅎ


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
#!/usr/bin/python
 
## 단어의 빈도수를 카운트 할 dictionary 를 만듭니다
word_dic = {}
 
## 텍스트 파일을 한 줄씩 읽어서
with open("hamlet.txt",'r') as fr:
    for line in fr:
        ## 한 줄을 소문자로 만들고 공백으로 잘라서 for 문으로 하나씩 뽑습니다
        for word in line.lower().strip().split():
            ## 단어가 dictionary에 등록 되어 있다면 카운트를 올려주고
            if word in word_dic:
                word_dic[word] += 1
            ## 단어가 dictionary에 없다면 등록하고 카운트를 1로 등록합니다.
            else:
                word_dic[word] = 1
 
## sorted 함수로 dictionary의 items() 메서드로 반환된 튜플을 정렬해 줍니다
word_list = sorted(word_dic.items(), key=lambda x: x[1], reverse=True)
 
## 상위 10개를 뽑아 봤습니다
print(word_list[:10])
 
## 결과
## [('the', 1083), ('and', 939), ('to', 727), 
##  ('of', 670), ('a', 540), ('i', 523),
##  ('my', 519), ('you', 433), ('in', 420), ('ham.', 358)]
cs


the 였군요!! ㅋㅋㅋ





오늘은 파이썬 딕셔너리의 value 로 정렬하고 

단어의 빈도수를 세어보는 방법에 대해 알아보았습니다.

여러분께 도움이 되셨으면 좋겠네요 :)

그럼 다음에 또 만나요 ^^


- 참고 URL


기부 버튼을 만들었습니다
여러분들의 작은 정성이 저에게 큰 힘이 됩니다
기부해주신 분들을 기억하며
더 좋은 내용으로 보답해 드리겠습니다 :)

Donate 버튼은 paypal 결제로 paypal 계정이 없으시더라도
카드로도 기부 가능하십니다 :)
Use your credit card or bank account (where available). 옆의 continue 를 누르시면 됩니다

한주현 드림



 



반응형

댓글