CodeGym /자바 코스 /Python SELF KO /루프와 딕셔너리 컴프리헨션

루프와 딕셔너리 컴프리헨션

Python SELF KO
레벨 11 , 레슨 6
사용 가능

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} 표현식은 두 딕셔너리의 요소를 합치는 것과 같아.

코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION