콘텐츠로 건너뛰기

파이썬 딕셔너리 반복하는 방법

CodeMDD.io

파이썬에서 딕셔너리 반복하기

딕셔너리 반복에 대한 튼튼한 지식은 더 나은, 견고한 코드를 작성하는 데 도움이 됩니다. 딕셔너리 반복을 통해 딕셔너리를 처리하는 다양한 예제를 작성하며 실습을 진행하겠습니다.

파이썬 딕셔너리 반복 시작하기

딕셔너리 반복에 대한 실습을 시작하기 전에 딕셔너리에 대한 기본 지식을 갖고 있어야 합니다. 딕셔너리는 키-값 쌍으로 구성되어 있으며 중괄호({})를 사용하여 생성합니다. 예를 들어, 다음과 같이 딕셔너리를 만들 수 있습니다:

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}

이제 우리는 이 딕셔너리를 사용하여 반복을 할 수 있습니다.

딕셔너리 직접 반복하기

가장 간단한 방법으로, 딕셔너리를 직접 반복할 수 있습니다. 이 경우에는 딕셔너리의 키만을 순회하며 반복하게 됩니다.

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for key in person:
print(key)

결과:

name
age
city

위의 예제에서는 딕셔너리의 각 키를 순회하여 출력합니다. 하지만 이렇게 하면 딕셔너리의 값에는 접근할 수 없습니다. 값을 사용하려면 .get() 메서드를 사용해야 합니다.

딕셔너리 key-value 쌍 반복하기: .items() 메서드

딕셔너리의 key와 value를 함께 반복하려면 .items() 메서드를 사용합니다. 이 메서드를 사용하면 반복문 변수에 key와 value의 쌍이 튜플로 할당됩니다.

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for key, value in person.items():
print(key, value)

결과:

name John Smith
age 30
city New York

.items() 메서드를 사용하면 딕셔너리의 키와 값 모두에 접근할 수 있습니다.

딕셔너리의 키를 반복하기: .keys() 메서드

만약 딕셔너리의 키(key)만을 반복하고 싶다면 .keys() 메서드를 사용합니다.

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for key in person.keys():
print(key)

결과:

name
age
city

위의 예제에서는 keys() 메서드를 사용하여 딕셔너리의 키만 반복합니다. 이렇게 하면 각 키에 직접 접근할 수 있습니다.

딕셔너리의 값(value)을 반복하기: .values() 메서드

딕셔너리의 값(value)만을 반복하고 싶다면 .values() 메서드를 사용합니다.

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for value in person.values():
print(value)

결과:

John Smith
30
New York

위의 예제에서는 .values() 메서드를 사용하여 딕셔너리의 값만 반복합니다. 이렇게 하면 딕셔너리의 각 값에 직접 접근할 수 있습니다.

딕셔너리 반복 중 값 변경하기

딕셔너리를 반복하면서 값을 변경해야 하는 경우가 종종 있습니다. 이때는 일반적인 반복 문법을 사용하면 안 됩니다. 대신에, .items() 메서드를 사용하여 반복해야 합니다.

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for key, value in person.items():
if key == 'age':
person[key] += 1
print(person)

결과:

{'name': 'John Smith', 'age': 31, 'city': 'New York'}

위의 예제에서는 딕셔너리를 반복하면서 ‘age’ 키가 있는 경우에만 값을 1 증가시킵니다.

딕셔너리 반복 중 안전하게 아이템 제거하기

딕셔너리를 반복하면서 특정 조건을 만족하는 아이템을 제거해야 할 때는 주의해야 합니다. 일반적으로 딕셔너리를 반복하면서 아이템을 삭제하면 오류가 발생합니다. 이를 예방하기 위해서는 .copy() 메서드를 사용하거나, .items() 메서드로 구조적으로 변경해야 합니다.

# .copy() 메서드 사용
person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for key, value in person.copy().items():
if key == 'age' and value > 30:
person.pop(key)
print(person)

결과:

{'name': 'John Smith', 'age': 30, 'city': 'New York'}
# .items() 메서드 사용
person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
items = list(person.items())
for key, value in items:
if key == 'age' and value > 30:
person.pop(key)
print(person)

결과:

{'name': 'John Smith', 'age': 30, 'city': 'New York'}

위의 예제에서는 딕셔너리를 반복하면서 ‘age’ 키에 해당하는 값이 30보다 큰 경우에만 아이템을 제거합니다. 이를 위해 .copy() 메서드나 .items() 메서드를 사용하여 안전하게 반복하고 제거했습니다.

for 문을 사용한 딕셔너리 반복 예제

이제 for 문을 사용하여 딕셔너리를 반복하는 몇 가지 예제를 살펴보겠습니다.

값에 따라 아이템 필터링하기

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
for key, value in person.items():
if value == 'New York':
print(key)

결과:

city

위의 예제에서는 ‘New York’ 값을 가지고 있는 아이템의 키를 출력합니다.

키와 값으로 계산하기

prices = {
'apple': 0.5,
'banana': 0.25,
'orange': 0.75
}
total_price = 0
for fruit, price in prices.items():
quantity = int(input(f'How many {fruit}s do you want to buy? '))
total_price += price * quantity
print(f'The total price is ${total_price:.2f}')

위의 예제에서는 각 과일의 가격을 입력받고, 사용자가 원하는 과일의 수량을 입력하여 총 가격을 계산합니다.

키와 값 교환하기

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
reservations = {}
for key, value in person.items():
reservations[value] = key
print(reservations)

결과:

{'John Smith': 'name', 30: 'age', 'New York': 'city'}

위의 예제에서는 딕셔너리의 키와 값의 위치를 서로 교환하여 새로운 딕셔너리를 생성합니다.

딕셔너리 컴프리헨션을 사용한 반복 예제

파이썬에는 리스트 컴프리헨션처럼 딕셔너리 컴프리헨션도 제공됩니다. 이를 사용하면 더 간단하고 간결한 코드를 작성할 수 있습니다. 몇 가지 예제를 살펴보겠습니다.

값에 따라 아이템 필터링하기: 재방문

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
revisited = {key: value for key, value in person.items() if value == 30}
print(revisited)

결과:

{'age': 30}

위의 예제에서는 값이 30인 아이템만 딕셔너리에 남겨두고 필터링합니다.

키와 값을 교환하기: 재방문

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
swapped = {value: key for key, value in person.items()}
print(swapped)

결과:

{'John Smith': 'name', 30: 'age', 'New York': 'city'}

위의 예제에서는 딕셔너리의 키와 값의 위치를 서로 교환하여 새로운 딕셔너리를 생성합니다.

정렬된 순서로 딕셔너리 반복하기

딕셔너리의 아이템을 정렬된 순서로 반복해야 할 때도 있습니다. 이를 위해 몇 가지 방법을 살펴보겠습니다.

정렬된 키를 반복하기

prices = {
'apple': 0.5,
'banana': 0.25,
'orange': 0.75
}
for fruit in sorted(prices.keys()):
print(fruit)

결과:

apple
banana
orange

위의 예제에서는 .keys() 메서드로 딕셔너리의 키를 가져와 정렬한 후 반복합니다.

정렬된 값들을 반복하기

prices = {
'apple': 0.5,
'banana': 0.25,
'orange': 0.75
}
for price in sorted(prices.values()):
print(price)

결과:

0.25
0.5
0.75

위의 예제에서는 .values() 메서드로 딕셔너리의 값을 가져와 정렬한 후 반복합니다.

컴프리헨션과 함께 딕셔너리 정렬하기

prices = {
'apple': 0.5,
'banana': 0.25,
'orange': 0.75
}
sorted_prices = {fruit: price for fruit, price in sorted(prices.items(), key=lambda item: item[1])}
print(sorted_prices)

결과:

{'banana': 0.25, 'apple': 0.5, 'orange': 0.75}

위의 예제에서는 sorted() 함수의 key 매개변수를 사용하여 딕셔너리를 값을 기준으로 정렬하고, 이를 컴프리헨션과 함께 새로운 딕셔너리로 생성합니다.

.popitem() 메서드를 사용한 딕셔너리 반복

.popitem() 메서드를 사용하면 딕셔너리를 반복하면서 아이템을 제거할 수 있습니다. 이 메서드는 가장 최근에 추가된 아이템부터 반복하며, 한 번에 하나씩 아이템을 꺼내옵니다.

person = {
'name': 'John Smith',
'age': 30,
'city': 'New York'
}
while person:
key, value = person.popitem()
print(f'{key}: {value}')

결과:

city: New York
age: 30
name: John Smith

위의 예제에서는 .popitem() 메서드를 사용하여 딕셔너리를 반복하면서 아이템을 제거합니다.

내장 함수를 사용한 딕셔너리 반복

내장 함수인 map()filter()를 사용하면 딕셔너리를 반복하면서 여러 작업을 수행할 수 있습니다.

map() 함수를 사용하여 딕셔너리의 아이템 변환하기

prices = {
'apple': 0.5,
'banana': 0.25,
'orange': 0.75
}
discounted_prices = dict(map(lambda item: (item[0], item[1] * 0.9), prices.items()))
print(discounted_prices)

결과:

{'apple': 0.45, 'banana': 0.225, 'orange': 0.675}

위의 예제에서는 map() 함수와 람다 함수를 사용하여 모든 아이템의 가격을 10% 할인한 딕셔너리를 생성합니다.

filter() 함수를 사용하여 딕셔너리의 아이템 필터링하기

prices = {
'apple': 0.5,
'banana': 0.25,
'orange': 0.75
}
cheap_fruits = dict(filter(lambda item: item[1] < 0.5, prices.items()))
print(cheap_fruits)

결과:

{'banana': 0.25}

위의 예제에서는 filter() 함수와 람다 함수를 사용하여 가격이 0.5보다 작은 아이템만 포함한 딕셔너리를 생성합니다.

여러 개의 딕셔너리를 하나로 반복

여러 개의 딕셔너리를 하나로 합쳐서 반복해야 하는 경우가 종종 있습니다. 이러한 경우 ChainMap 또는 chain()을 사용할 수 있습니다.

ChainMap을 사용하여 여러 개의 딕셔너리 반복하기

from collections import ChainMap
person1 = {
'name': 'John Smith',
'age': 30
}
person2 = {
'city': 'New York',
'country': 'USA'
}
combined = ChainMap(person1, person2)
for key, value in combined.items():
print(key, value)

결과:

country USA
city New York
age 30
name John Smith

위의 예제에서는 ChainMap을 사용하여 person1person2 딕셔너리를 하나로 합칩니다. 그 후 반복문을 사용하여 모든 아이템을 출력합니다.

chain()을 사용하여 여러 개의 딕셔너리 반복하기

from itertools import chain
person1 = {
'name': 'John Smith',
'age': 30
}
person2 = {
'city': 'New York',
'country': 'USA'
}
combined = chain(person1.items(), person2.items())
for key, value in combined:
print(key, value)

결과:

name John Smith
age 30
city New York
country USA

위의 예제에서는 chain()을 사용하여 person1person2 딕셔너리의 아이템을 하나로 결합합니다. 그 후 반복문을 사용하여 모든 아이템을 출력합니다.

복수의 딕셔너리 루프하기: Unpacking 연산자 (**)

복수의 딕셔너리를 반복하고 싶은 경우 ** 연산자를 사용할 수 있습니다. 이를 이용하면 두 개 이상의 딕셔너리를 하나로 합치고 반복할 수 있습니다.

user1 = {
'name': 'John Smith',
'age': 30
}
user2 = {
'name': 'Lisa Johnson',
'age': 28
}
users = {**user1, **user2}
for key, value in users.items():
print(key, value)

결과:

name John Smith
age 28

위의 예제에서는 ** 연산자를 사용하여 user1user2 딕셔너리를 합칩니다. 그 후 반복문을 사용하여 모든 아이템을 출력합니다.

주요 포인트

이 튜토리얼에서는 파이썬에서 딕셔너리를 반복하는 다양한 방법을 알아보았습니다. 다음은 주요 요점입니다:

  • 딕셔너리를 직접 반복하려면 for 문을 사용합니다.
  • .items() 메서드로 딕셔너리의 key-value 쌍을 반복할 수 있습니다.
  • .keys() 메서드로 딕셔너리의 키를 반복할 수 있습니다.
  • .values() 메서드로 딕셔너리의 값들을 반복할 수 있습니다.
  • 딕셔너리를 반복하면서 값을 변경 또는 삭제해야 하는 경우 주의해야 합니다.
  • ChainMap 또는 chain()을 사용하여 여러 개의 딕셔너리를 하나로 합쳐서 반복할 수 있습니다.
  • ** 연산자를 사용하여 두 개 이상의 딕셔너리를 하나로 합치고 반복할 수 있습니다.

이 튜토리얼에서는 패키지 및 라이브러리를 사용하지 않고 파이썬 내장 기능만 사용하여 딕셔너리를 반복하는 방법을 알아보았습니다. 이를 활용하여 더욱 효율적이고 유연한 프로그램을 작성할 수 있습니다.