6.1 enumerate()
사용하기
이미 딕셔너리에서 keys
, values
, items
를 통한 루프 작업을 살펴봤어. 이제 enumerate()
함수에 대해 자세히 알아보자.
enumerate()
함수는 딕셔너리의 요소를 인덱스와 키, 값에 모두 접근 가능하게 해주는 유용한 도구야.
여기 enumerate()
를 딕셔너리와 함께 사용하는 몇 가지 예시가 있어:
인덱스와 함께 딕셔너리의 키와 값 순회하기
딕셔너리의 키와 값을 순회하면서 인덱스를 얻으려면 enumerate()
를 사용할 수 있어.
# 사람에 대한 데이터를 가진 딕셔너리
person = {"name": "Alice", "age": 25, "city": "New York"}
# 인덱스와 함께 딕셔너리의 키와 값 순회하기
for index, (key, value) in enumerate(person.items()):
print(f"인덱스: {index}, 키: {key}, 값: {value}")
# 딕셔너리의 각 요소에 대해 인덱스, 키, 값을 출력함
출력:
인덱스: 0, 키: name, 값: Alice
인덱스: 1, 키: age, 값: 25
인덱스: 2, 키: city, 값: New York
인덱스를 사용하여 딕셔너리 값 변환하기
인덱스에 따라 딕셔너리의 값을 변경하려면 enumerate()
를 사용할 수 있어.
# 기존 딕셔너리
person = {"name": "Alice", "age": 25, "city": "New York"}
# 인덱스를 값에 추가한 새로운 딕셔너리
indexed_person = {}
for index, (key, value) in enumerate(person.items()):
indexed_person[key] = f"{value}_{index}"
# 딕셔너리의 값에 인덱스를 문자열로 추가함
print(indexed_person)
# 인덱스가 값에 추가된 딕셔너리를 출력함
출력:
{'name': 'Alice_0', 'age': '25_1', 'city': 'New York_2'}
새로운 딕셔너리를 만들 때 enumerate()
사용하기
enumerate()
를 사용하여 인덱스를 키로 사용하는 새로운 딕셔너리를 만들 수 있어.
# 기존 딕셔너리
person = {"name": "Alice", "age": 25, "city": "New York"}
# 인덱스를 키로 사용하는 새로운 딕셔너리
indexed_person = {index: (key, value) for index, (key, value) in enumerate(person.items())}
print(indexed_person)
# 인덱스가 키로 사용된 새로운 딕셔너리를 출력함
출력:
{0: ('name', 'Alice'), 1: ('age', 25), 2: ('city', 'New York')}
6.2 딕셔너리 컴프리헨션
이미 List Comprehensions으로 리스트를 생성하고 Set Comprehensions으로 세트를 생성한 적이 있어. 이와 유사하게 딕셔너리를 생성할 때도 컴프리헨션 문법을 사용할 수 있어. Dictionary Comprehensions (딕셔너리 컴프리헨션)은 딕셔너리를 생성하는 더 짧고 가독성 있는 코드를 쓸 수 있도록 도와줘.
기본적인 dictionary comprehension 문법은 다음과 같아:
{표현식1: 표현식2 for 변수 in 순차 데이터 if 조건}
여기서
-
변수
— 순회 가능한 객체의 각 요소 값을 취하는 변수. -
순차 데이터
— 주어진 변수로 순회 가능한 객체 (예: 리스트, 튜플, 문자열). -
표현식1
— 딕셔너리의 키를 생성하는 표현식. 보통 변수에 의존함. -
표현식2
— 딕셔너리의 값을 생성하는 표현식. -
조건
— (옵션) 딕셔너리에 요소를 포함시키기 위해 충족되어야 할 조건.
예시 1:
숫자의 제곱을 가진 딕셔너리 생성하기
# 키는 1부터 5까지의 숫자이고 값은 그들의 제곱인 딕셔너리 생성
squares = {x: x ** 2 for x in range(1, 6)}
print(squares) # 출력: {1: 1, 2: 4, 3: 9, 4: 16, 5: 25}
예시 2:
튜플 리스트로부터 딕셔너리 생성하기
# 키-값 쌍을 가진 튜플 리스트
pairs = [("name", "Alice"), ("age", 25), ("city", "New York")]
# 튜플 리스트로부터 딕셔너리 생성하기
person = {key: value for key, value in pairs}
print(person) # 출력: {'name': 'Alice', 'age': 25, 'city': 'New York'}
예시 3:
딕셔너리를 생성할 때 요소 필터링하기
# 키는 1부터 10까지의 숫자이고 값은 그들의 제곱인 딕셔너리 생성
# 짝수만 포함
even_squares = {x: x ** 2 for x in range(1, 11) if x % 2 == 0}
print(even_squares) # 출력: {2: 4, 4: 16, 6: 36, 8: 64, 10: 100}
예시 4:
딕셔너리 생성 시 요소 변환하기
# 문자열 리스트
words = ["apple", "banana", "cherry"]
# 키는 문자열이고 값은 그들의 길이인 딕셔너리 생성
word_lengths = {word: len(word) for word in words}
print(word_lengths) # 출력: {'apple': 5, 'banana': 6, 'cherry': 6}
중첩 dictionary comprehensions
# 키-값 쌍을 가진 리스트의 리스트
nested_pairs = [[("a", 1), ("b", 2)], [("c", 3), ("d", 4)]]
# 중첩 리스트로부터 딕셔너리 생성
nested_dict = {key: value for sublist in nested_pairs for key, value in sublist}
print(nested_dict) # 출력: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
복합적인 방법
더 복잡한 경우를 위해 다양한 방법을 조합하여 딕셔너리를 생성할 수 있어.
# 여러 딕셔너리를 하나로 결합하기
dict1 = {"name": "John", "age": 30}
dict2 = {"city": "New York", "country": "USA"}
combined_dict = {**dict1, **dict2}
print(combined_dict) # 출력: {'name': 'John', 'age': 30, 'city': 'New York', 'country': 'USA'}
**
연산자를 사용하면 딕셔너리의 요소를 하나씩 늘어놓은 것처럼 풀어낼 수 있어. 그래서 {**dict1, **dict2}
표현식은 두 딕셔너리의 요소를 합치는 것과 같아.
GO TO FULL VERSION