HOWTO · Python
Python의 루프 내 사전에 키-값 쌍 추가
Python의 루프 내에서 사전에 키-값 쌍을 추가하는 방법을 알아봅니다.
이 페이지의 내용
딕셔너리 할당은 항목을 추가하거나 갱신합니다. 루프 안에 dictionary[key] = value를 넣으면 됩니다. 키와 값이 별도의 반복 가능한 객체에 있다면 for 루프에서 zip()으로 쌍을 만드세요. 인덱스 자체가 필요할 때는 while 루프를 사용합니다.
루프 안에서 딕셔너리에 키-값 쌍 추가하기
딕셔너리를 준비한 다음, 루프가 각 쌍을 순회할 때마다 키에 해당 값을 할당합니다. 값은 서로 다른 종류의 Python 객체여도 되지만, 키는 해시 가능해야 합니다. 다음 예제에서는 이름과 점수를 짝짓습니다.
zip()으로 키와 값 짝짓기
zip(keys, values)는 반복할 때마다 각 반복 가능한 객체에서 항목 하나씩 가져와 쌍을 만듭니다. 다음 예제를 실행해 보세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
for key, value in zip(keys, values):
scores[key] = value
print(scores)
{'Ada': 98, 'Linus': 91, 'Grace': 100}
각 점수는 짝을 이룬 이름을 키로 하여 저장됩니다. 값으로 리스트나 함수, 그 밖의 객체를 사용하는 경우에도 이 패턴을 쓸 수 있습니다. 해시 가능해야 한다는 조건은 딕셔너리 키에만 적용됩니다.
인덱스가 필요할 때 while 루프 사용하기
다른 작업에서 위치 정보가 필요하다면 인덱스를 사용하는 루프가 유용합니다. 종료 지점을 정하고 반복할 때마다 인덱스를 증가시키세요.
이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.
keys = ["Ada", "Linus", "Grace"]
values = [98, 91, 100]
scores = {}
index = 0
limit = min(len(keys), len(values))
while index < limit:
scores[keys[index]] = values[index]
index += 1
여기서 limit은 두 리스트에 모두 존재하는 위치만 접근하도록 합니다. 일반적인 짝짓기에는 for key, value in zip(keys, values)가 더 짧고, 인덱스를 직접 관리할 필요도 없습니다.
길이가 다른 입력과 기존 키 처리하기
기본적으로 zip()은 가장 짧은 반복 가능한 객체가 소진되면 멈춥니다. 따라서 더 긴 쪽에 남은 항목은 짝지어지지 않습니다. 모든 키에 값이 있어야 한다면 루프를 돌기 전에 입력 길이를 비교하고 길이가 다를 때 프로그램에서 어떻게 처리할지 정하세요.
딕셔너리에 이미 있는 키에 값을 할당하면 같은 키의 항목이 하나 더 생기는 것이 아니라 기존 값이 바뀝니다. 두 값을 모두 보존해야 한다면 컬렉션을 값으로 저장하고 그 컬렉션에 값을 추가하세요. 키는 해시 가능해야 하므로 문자열, 숫자, 해시 가능한 항목으로 이루어진 튜플은 키로 쓸 수 있지만, 변경 가능한 리스트와 딕셔너리는 쓸 수 없습니다.
결과 출력과 복잡도 이해하기
작은 딕셔너리를 확인하려면 print(scores)를 사용하거나 scores.items()를 순회해 키와 값을 각각 형식에 맞게 출력할 수 있습니다. 예제에 사용된 값으로 만든 간단한 딕셔너리 표현은 결정적입니다. 사용자 정의 객체는 메모리 주소가 포함된 표현을 표시할 수 있으므로, 읽기 쉽고 반복 가능한 출력을 원한다면 필요한 속성을 직접 출력하세요.
쌍이 m개라면 루프는 m번 할당합니다. 딕셔너리 할당은 평균적으로 O(1)이므로 전체 시간은 평균 O(m)입니다. 이는 평균적인 경우의 동작이며, 해시 충돌이 발생하면 개별 할당이 더 느려질 수 있습니다. 결과 딕셔너리는 서로 다른 키를 최대 m개 담으므로 추가 공간은 O(m)입니다. zip() 반복자 자체의 보조 공간은 상수입니다. 딕셔너리에 이미 항목이 d개 있다면, 짝지은 키가 기존 값을 바꾸는 경우를 제외하고 그 항목들은 유지되며 최종 크기는 최대 d + m입니다.