Dictionary
딕셔너리는 중괄호({})로 이루어져 있으며 리스트와 다르게 순서가 없다. 대신 키 값으로 호출이 가능하다. 연관배열(Associative Arrays)이라고도 한다.
리스트와 같이 원소의 추가와 삭제가 가능하다.
# 비어있는 딕셔너리 만들고 추가하기
purse = dict() # 빈 중괄호도 가능
purse['money'] = 12
purse['candy'] = 3
purse['tissues'] = 75
print(purse) # {'money' : 12, 'tissues' : 75, 'candy : 3}
# 연산하기
purse['candy'] = purse['candy'] + 2
print(purse) # {'money' : 12, 'tissues' : 75, 'candy : 5}
딕셔너리를 이용한 리스트 내의 요소 카운팅(Counting with Dictionaries)
# 딕셔너리를 이용해 리스트 내의 요소 카운팅
counts = dict()
names = ['csev', 'cwen', 'csev', 'zqian', 'cwen']
for name in names:
if name not in counts:
counts[name] = 1 # 없으면 추가
else:
counts[name] = counts[name] + 1 # 있으면 value값에 +1
print(counts)
get() 메소드의 매개 변수로 키와 기본값을 넣어주면 이미 존재하는 키라면 키의 값을 반환하고 키가 존재하지 않으면 기본값으로 설정한다.
이를 이용해 위의 코드를 더 간단하게 만들 수도 있다.
counts = dict()
names = ['csev', 'cwen', 'csev', 'zqian', 'cwen']
for name in names:
counts[name] = counts.get(name, 0) + 1
print(counts)
# split() 메소드를 이용해 문자열을 리스트로 만들어 카운팅하기
counts = dict()
print('Enter a line of text:')
input('')
words = line.split()
print('Words: ', words) # 딱히 필요한 부분은 아닌 것 같다.
print('Counting...') # 딱히 필요한 부분은 아닌 것 같다.
for word in words:
counts[word] = counts.get(word, 0) + 1
print('Counts', counts)
딕셔너리의 값 출력하기
counts = {'chuck' : 1, 'fred' : 42, 'jan' : 100}
for key in counts:
print(key, counts[key])
# jan 100
# chuck 1
# fred 42
print(list(counts)) # ['jan', 'chuck', 'fred']
print(counts.keys()) # ['jan', 'chuck', 'fred']
print(counts.values()) # [100, 1, 42]
print(counts.items()) # [('jan', 100),('chuck', 1),('fred', 42)]
for aaa,bbb in counts.items():
print(aaa,bbb)
# jan 100
# chuck 1
# fred 42
파일 내부에서 가장 많이 쓰인 단어 찾는 코드
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)
Assignment
Assignment 9.4는 mbox-short.txt를 읽고 누가 가장 많은 메일 메시지를 보냈는지 확인하는 프로그램을 작성하는 것이었다. Files 챕터와 같이 'From: ' 행을 검색하고 해당 행을 split() 함수를 이용해 리스트로 만든 뒤 메일 주소를 추출해서 횟수를 카운팅해 딕셔너리에 저장한다. 그리고 maximum loop를 활용하여 가장 많이 보낸 사람을 찾는 것이었다.
나의 풀이는 아래와 같다.
# ex_9_4
name = input("Enter file:")
if len(name) < 1:
name = "mbox-short.txt"
handle = open(name)
count = dict()
most1 = None
most2 = None
for line in handle:
if not line.startswith('From ') : continue
line = line.split()
line = line[1]
count[line] = count.get(line, 0) + 1
for most,most0 in count.items():
if most2 is None or most2 < most0:
most1 = most
most2 = most0
print(most1, most2)
'Python > PY4E' 카테고리의 다른 글
PY4E Chapter 11. Regular Expressions (0) | 2022.08.09 |
---|---|
PY4E Chapter 10. Tuples (0) | 2022.08.08 |
PY4E Chapter 8. Lists (0) | 2022.08.08 |
PY4E Chapter 7. Files (0) | 2022.08.07 |
PY4E Chapter 6. Strings (0) | 2022.08.05 |
댓글