1. 딕셔너리(Dictionary)
purse = dict() # 또는 purse = {} 와 같이 생성할 수도 있습니다.
purse['money'] = 12 # 'money'라는 키에 12라는 값 연결
purse['candy'] = 3 # 'candy'라는 키에 3이라는 값 연결
purse['tissues'] = 75 # 'tissues'라는 키에 75라는 값 연결
counts = dict()
names = ['csev', 'cwen', 'csev', 'zqian', 'cwen']
for name in names :
if name in counts:
counts[name] = counts[name] + 1
else :
counts[name] = 1
print(counts)
get 메소드
counts.get(name, 0)의 의미는 counts 딕셔너리에 name이라는 키가 존재할 경우 name에 대한 값을 불러오고,
그렇지 않을 경우에는 counts 딕셔너리에 name이라는 키에 0이라는 값을 갖는 데이터를 추가하라는 의미
counts = dict()
names = ['csev', 'cwen', 'csev', 'zqian', 'cwen']
for name in names :
counts[name] = counts.get(name, 0) + 1
print(counts)
split 메소드
line = 'The general pattern to count the words'
print(line.split())
# ['The', 'general', 'pattern', 'to', 'count', 'the', 'words']
* 갯수 출력하기
for word in words:
counts[word] = counts.get(word,0) + 1
print('Counts', counts)
# Counts {'The': 2, 'general': 2, 'pattern': 2, 'to': 6, 'count': 4, 'the': 8, 'words': 4, 'in': 2, 'a': 4, 'line': 4, 'of': 4, 'text': 2, 'is': 2, 'split': 2, 'into': 2, 'words,': 2, 'then': 2, 'loop': 2, 'through': 2, 'and': 2, 'use': 2, 'dictionary': 2, 'track': 2, 'each': 2, 'word': 2, 'independently.': 2}
* 딕셔너리의 키나 값을 별도로 저장하는 법
counts = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
for key in counts:
print(key, counts[key])
# chuck 1
# fred 42
# jan 100
딕셔너리를 리스트로 변환하면 이와 같이 키로만 구성된 리스트를 얻을 수 있음
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
print(list(jjj))
# ['jan', 'chuck', 'fred']
딕셔너리의 keys라는 메소드를 사용해도 같은 결과를 얻을 수 있음
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
print(jjj.keys())
# ['jan', 'chuck', 'fred']
딕셔너리의 값으로만 구성된 리스트를 얻으려면 values라는 메소드를 사용
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
print(jjj.values())
# [100, 1, 42]
items 메소드
'튜플(tuple)'이라는 자료 구조 안에 키와 값이 쌍을 이루어 저장된 리스트가 반환
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
print(jjj.items())
# [('jan', 100), ('chuck', 1), ('fred', 42)]
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
for aaa,bbb in jjj.items() :
print(aaa, bbb)
# chuck 1
# fred 42
# jan 100
파일에 저장된 데이터 읽어와서 빈도 분석하기
name = input('Enter file:')
handle = open(name)
counts = dict()
for line in handle:
words = line.split()
for word in words:
counts[word] = counts.get(word,0) + 1
bigcount = None
bigword = None
for word,count in counts.items():
if bigcount is None or count > bigcount:
bigword = word
bigcount = count
print(bigword, bigcount)
# Enter file: words.txt
# 딕셔너리를 활용한 딕셔너리 정렬
fname = input('Enter File: ')
if len(fname) < 1 : fname = 'clown.txt'
hand = open(fname)
di = dict()
for lin in hand :
lin = lin.rstrip()
wds = lin.split()
for w in wds :
di[w] = di.get(w,0) + 1
largest = -1
theword = None
for k, v in di.items() :
print(k,v)
if v > largest :
largest = v
theword = k
print('Done', theword, largest)
2. 튜플(Tuple)
리스트와 같이 순서가 있어서 인덱스로 접근이 가능하고, 최대값도 찾을 수 있음
x = ('Glenn', 'Sally', 'Joseph')
print(x[2])
# Joseph
y = ( 1, 9, 2 )
print(y)
# (1, 9, 2)
print(max(y))
# 9
for iter in y :
print(iter)
# 1
# 9
# 2
리스트를 튜플로 변환
list = ['a', 1, 'b', 2, 'c', 3]
dict = {list[i]: list[i + 1] for i in range(0, len(list), 2)}
print(list)
print(dict)
변경 불가능한 속성 (immutable)
한 번 생성된 튜플은 정렬하거나, 값을 추가하거나, 순서를 바꿀 수 없음
(0, 1, 2) < (5, 1, 2)
# True 값을 가집니다.
(0, 1, 2000000) < (0, 3, 4)
# True 값을 가집니다.
( 'Jones', 'Sally' ) < ('Jones', 'Sam')
# True 값을 가집니다.
( 'Jones', 'Sally') > ('Adams', 'Sam')
# True 값을 가집니다.
키를 기준으로 정렬하기
위의 두 가지 특성을 활용하면 키를 기준으로 딕셔너리를 정렬
- 딕셔너리에서 items 메소드를 실행해 튜플로 이루어진 리스트 형태로 만든다.
- 이 리스트를 sorted 함수로 정렬한다. 그러면 각각의 튜플의 왼쪽 값, 즉 키를 기준으로 정렬이 된다.
d = {'b':1, 'a':10, 'c':22}
d.items()
# dict_items([('b', 1), ('a', 10), ('c', 22)])
sorted(d.items())
# [('a', 10), ('b', 1), ('c', 22)]
for k, v in sorted(d.items()):
print(k, v)
# a 10
# b 1
# c 22
값을 기준으로 정렬하기
- 딕셔너리에서 items 메소드를 실행한다.
- 튜플을 활용해 키와 값을 분리한다.
- 키와 값의 위치를 바꾼 리스트를 생성한다.
- 생성된 리스트를 정렬한다.
c = {'a':10, 'b':1, 'c':22}
tmp = list()
for k, v in c.items() :
tmp.append( (v, k) )
print(tmp)
# [(10, 'a'), (1, 'b'), (22, 'c')]
tmp = sorted(tmp)
print(tmp)
# [(1, 'b'), (10, 'a'), (22, 'c')]
여기에서 만약 내림차순으로 정렬하고 싶다면 다음과 같이 sorted 함수에 reverse 옵션을 True로 설정
c = {'a':10, 'b':1, 'c':22}
tmp = list()
for k, v in c.items() :
tmp.append( (v, k) )
print(tmp)
# [(10, 'a'), (1, 'b'), (22, 'c')]
tmp = sorted(tmp, reverse=True)
print(tmp)
# [(22, 'c'), (10, 'a'), (1, 'b')]
가장 많이 등장한 단어 Top 10 출력하기
fhand = open('romeo.txt')
counts = {}
for line in fhand:
words = line.split()
for word in words:
counts[word] = counts.get(word, 0 ) + 1
lst = []
for key, val in counts.items():
newtup = (val, key)
lst.append(newtup)
lst = sorted(lst, reverse=True)
for val, key in lst[:10] :
print(key, val)
리스트 컴프리헨션 (List comprehension)
c = {'a':10, 'b':1, 'c':22}
tmp = list()
for k, v in c.items() :
tmp.append( (v, k) )
tmp = sorted(tmp)
print(tmp)
# [(1, 'b'), (10, 'a'), (22, 'c')]
c = {'a':10, 'b':1, 'c':22}
print( sorted( [ (v,k) for k,v in c.items() ] ) )
# [(1, 'b'), (10, 'a'), (22, 'c')]
#튜플을 이용한 딕셔너리 정렬
fname = input('Enter File: ')
if len(fname) < 1 : fname = 'clown.txt'
hand = open(fname)
di = dict()
for lin in hand :
lin = lin.rstrip()
wds = lin.split()
for w in wds :
di[w] = di.get(w,0) + 1
tmp = list()
for k, v in di.items() :
newt = (v,k)
tmp.append(newt)
tmp = sorted(tmp, reverse = True)
for v,k in tmp[:5] :
print(k,v)
'온라인 강의 > Python(네이버 부스트코스)' 카테고리의 다른 글
PY4E(네이버 부스트코스 파이썬 코칭 스터디) 회고 (0) | 2022.09.05 |
---|---|
리스트 (0) | 2022.08.12 |
파이썬 - 문자열, 파일(네이버 부스트코스) (0) | 2022.08.04 |