딕셔너리에 루프를 적용시키는 방법
counts라는 딕셔너리를 for 반복문에 넣고 다음과 같이 실행하면 아래와 같다.
counts = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
for a in counts:
print(a, counts[a])

for문에서
a에는 딕셔너리의 키(key)가, counts[a] 에는 딕셔너리의 값(value)이 각각 저장되는 것을 볼 수 있다.
이를 활용해 딕셔너리의 키와 값을 별도로 저장할 수 있다.
먼저 딕셔너리를 리스트로 변환하면 키로만 이루어진 리스트를 얻어낼 수 있다.
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']
딕셔너리의 값(value)으로만 구성된 리스트를 얻으려면 values라는 메소드를 사용하면 된다.
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
print(jjj.values())
# [100, 1, 42]
items() 메서드
keys, values 메소드로는 한번에 딕셔너리의 키와 값의 쌍을 얻을 수 없다.
키와 값의 쌍을 얻기 위해서는 items 메소드를 사용하면 된다.
딕셔너리에 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
이 때, items는 2개의 리턴값을 가진다.
따라서 이것을 받을 변수도 2개가 있어야 한다.
그렇지 않으면 예기치않은 값이 나오게 된다.
텍스트 파일에서 데이터를 읽어와 가장 많이 나온 단어를 출력하는 프로그램
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)
PY4E를 잘 따라온다면
위의 코드를 잘 해석할 수 있는 능력이 생기고
다른 것들도 충분히 짤 수 있는 능력이 생긴다.
먼저 파일을 불러와
한줄씩 읽어가며 그것을 리스트로 바꾸고
그 리스트를 읽어 단어를 하나씩 counts 딕셔너리에 넣는다.
넣어진 딕셔너리를 통해
최고값을 계속 하나씩 비교하는데
이때 단어와 갯수 2개의 인자를 모두 받아와야해서
items() 메서드를 사용한다.
딕셔너리에 루프를 적용시키는 방법
counts라는 딕셔너리를 for 반복문에 넣고 다음과 같이 실행하면 아래와 같다.
counts = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
for a in counts:
print(a, counts[a])

for문에서
a에는 딕셔너리의 키(key)가, counts[a] 에는 딕셔너리의 값(value)이 각각 저장되는 것을 볼 수 있다.
이를 활용해 딕셔너리의 키와 값을 별도로 저장할 수 있다.
먼저 딕셔너리를 리스트로 변환하면 키로만 이루어진 리스트를 얻어낼 수 있다.
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']
딕셔너리의 값(value)으로만 구성된 리스트를 얻으려면 values라는 메소드를 사용하면 된다.
jjj = { 'chuck' : 1 , 'fred' : 42, 'jan': 100}
print(jjj.values())
# [100, 1, 42]
items() 메서드
keys, values 메소드로는 한번에 딕셔너리의 키와 값의 쌍을 얻을 수 없다.
키와 값의 쌍을 얻기 위해서는 items 메소드를 사용하면 된다.
딕셔너리에 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
이 때, items는 2개의 리턴값을 가진다.
따라서 이것을 받을 변수도 2개가 있어야 한다.
그렇지 않으면 예기치않은 값이 나오게 된다.
텍스트 파일에서 데이터를 읽어와 가장 많이 나온 단어를 출력하는 프로그램
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)
PY4E를 잘 따라온다면
위의 코드를 잘 해석할 수 있는 능력이 생기고
다른 것들도 충분히 짤 수 있는 능력이 생긴다.
먼저 파일을 불러와
한줄씩 읽어가며 그것을 리스트로 바꾸고
그 리스트를 읽어 단어를 하나씩 counts 딕셔너리에 넣는다.
넣어진 딕셔너리를 통해
최고값을 계속 하나씩 비교하는데
이때 단어와 갯수 2개의 인자를 모두 받아와야해서
items() 메서드를 사용한다.