딕셔너리를 순회하는 방법을 배울 거에요. 딕셔너리는 여러 가지 방법으로 정보를 저장할 수 있기 때문에 이를 순회하는 다양한 방법이 있어요. 주어진 딕셔너리의 키, 값 또는 모든 키-값 쌍을 순회할 수 있어요.
키-값 쌍을 순회하기
세 개의 키-값 쌍을 포함하는 scientist_0 딕셔너리를 고려해봐요:
# 파일 이름: scientist.py
scientist_0 = {
'username': 'rfeynman',
'first name': 'richard',
'last name': 'feynman',
}
for key, value in scientist_0.items():
print(f"\n키: {key}")
print(f"값: {value}")
루프에 대한 예시를 보면, 코드를 실행하면 다음과 같이 결과가 나옵니다
$ python3 scientist.py
Key: username
Value: rfeynman
Key: first name
Value: richard
Key: last name
Value: feynman
이후에 자세히 설명하겠습니다.
키와 값에 대해 간단히 k와 v를 사용할 수 있습니다. 따라서 아래와 같이 코드를 작성하면 (특히 루프 부분을 참조하십시오), Python이 이전 코드와 정확히 동일하게 이해합니다.
# 파일 이름: scientist.py
scientist_0 = {
'username': 'rfeynman',
'first name': 'richard',
'last name': 'feynman',
}
for k, v in scientist_0.items():
print(f"\nKey: {k}")
print(f"Value: {v}")
위의 for 문에서 scientist_0 사전의 이름 뒤에 items() 메서드가 따라옵니다. 이 메서드는 키-값 쌍을 반환합니다. 그런 다음 각 키-값 쌍이 여기에서 Key와 Value로 정의된 두 변수에 할당됩니다.
키값만 루핑
items() 메서드 대신 keys() 메서드를 사용하면 사전의 키만을 순회할 수 있습니다.
# file name: scientist_hobby.py
scientist_hobby = {
'einstein': '바이올린',
'feynman': '봉고',
'dirac': '사색',
}
for name in scientist_hobby.keys():
print(name.title())
위 코드에서는 scientist_hobby라는 사전이 정의되어 있습니다. 이 사전은 이름이 과학자의 이름이고 값이 과학자의 취미인 세 개의 키-값 쌍으로 이루어져 있습니다. 만약 여기서 값이 아닌 과학자들의 이름인 키만 필요하다면, keys() 메서드를 사용하면 됩니다.
$ python3 scientist_hobby.py
Einstein
Feynman
Dirac
위 코드를 실행하면 사전의 키만을 반환합니다. 여기서 간단히 언급하고 싶은데, 이러한 상황(값이 아닌 키만 반환하는 것)은 keys() 메서드를 특별히 지정하지 않을 때의 기본 동작입니다.
# 파일명: scientist_hobby.py
scientist_hobby = {
'einstein': '바이올린',
'feynman': '봉고',
'dirac': '사색',
}
for anything in scientist_hobby:
print(anything.title())
위 코드에서 .keys()를 제외하였지만, 이 코드를 실행하면 과학자들의 이름만 반환하여 결과는 똑같이 나올 것입니다.
알파벳 순서로 키를 순회하고 싶다면 sorted() 메서드를 사용할 수 있습니다:
# 파일명: scientist_hobby.py
scientist_hobby = {
'einstein': '바이올린',
'feynman': '봉고',
'dirac': '사색',
}
for name in sorted(scientist_hobby.keys()):
print(name.title())
위의 코드를 실행하면 다음과 같이 됩니다
$ python3 scientist_hobby.py
Dirac
Einstein
Feynman
값만 반복
상담하신 것처럼, 우리는 키가 없는 값의 순서를 반환하기 위해 위에서 논의한 keys() 메소드와 대조해서 values() 메소드를 사용할 수 있습니다.
# 파일 이름: scientist_hobby.py
scientist_hobby = {
'einstein': 'violin',
'feynman': 'bongo',
'dirac': 'pondering',
'heisenberg': 'violin',
}
print("이러한 취미가 언급되었습니다:")
for hobby in scientist_hobby.values():
print(hobby.title())
위의 코드를 실행하면 다음이 반환됩니다:
$ python3 scientist_hobby.py
이러한 취미가 언급되었습니다:
Violin
Bongo
Pondering
Violin
여기서 바이올린은 두 명이 동일한 취미를 가지고 있기 때문에 반복됩니다. 이러한 종류의 반복을 방지하고 싶은 경우 아래에 표시된 대로 set() 메소드를 사용할 수 있습니다:
# file name: scientist_hobby.py
scientist_hobby = {
'einstein': 'violin',
'feynman': 'bongo',
'dirac': 'pondering',
'heisenberg': 'violin',
}
print("These hobbies have been mentioned:")
for hobby in set(scientist_hobby.values()):
print(hobby.title())
$ python3 scientist_hobby.py
These hobbies have been mentioned:
Violin
Pondering
Bongo
Now Violin is returned only once.
One can also make a set using braces ({}). However, in contrast to a dictionary where a set of key-value pairs are given inside '{}', in a set each single element should be separated by a comma.
>>> 취미 = {'바이올린', '봉고', '사색', '바이올린', '봉고'}
>>> 취미
{'사색', '바이올린', '봉고'}
딕셔너리와 집합 사이의 차이를 알아두면 혼란을 방지할 수 있어요.