HOWTO · Python
Python에서 여러 값을 사용하는 사전
이 튜토리얼은 파이썬에서 사전의 키에 여러 값을 추가하는 방법을 보여줍니다.
이 페이지의 내용
Python 딕셔너리는 각 키에 하나의 값을 저장합니다. 그 값이 리스트일 수 있으므로, 하나의 키에 여러 항목을 연결하고 데이터가 들어올 때마다 항목을 추가할 수 있습니다.
예를 들어 아래에서 "a"의 값은 [1, 2] 리스트입니다:
d = {"a": [1, 2], "b": [2, 3], "c": [4, 5]}
print(d)
이 패턴은 반복되는 키를 그룹화하거나 서로 관련된 여러 값을 함께 보관할 때 유용합니다. 아래 예제에서는 재사용 가능한 도우미 함수, defaultdict, setdefault()를 살펴봅니다.
사전의 키에 여러 값을 추가하는 사용자 정의 함수 사용
도우미 함수로 키가 처음 나타날 때 초기화한 다음, extend()를 사용해 이터러블의 각 항목을 기존 리스트에 추가할 수 있습니다. 여기서 함수는 전달받은 딕셔너리를 변경하고 반환합니다. 입력 리스트 자체를 중첩 항목으로 저장하지는 않습니다.
다음 예제를 실행해 보세요:
def add_values(mapping, key, values):
if key not in mapping:
mapping[key] = []
mapping[key].extend(values)
return mapping
word_freq = {"tutorial": [2, 3, 5]}
add_values(word_freq, "tutorial", [20, 21, 22])
print(word_freq)
이 방법은 이름이 있는 작업으로 만들고 싶거나 같은 초기화 로직을 여러 곳에서 적용해야 할 때 유용합니다. 리스트 같은 이터러블을 extend()에 전달하면 각 항목이 대상 리스트에 추가됩니다.
defaultdict를 사용해 사전의 키에 여러 값 추가
collections에서 defaultdict를 가져온 뒤 기본 팩토리로 list를 지정합니다. 그러면 없는 키를 조회할 때 새 리스트가 만들어져 저장되므로, 반복되는 키가 포함된 쌍을 그룹화하기 편리합니다. 일반 딕셔너리에서 없는 키를 조회하면 KeyError가 발생합니다. defaultdict도 모든 연산에서 이를 방지하는 것은 아닙니다. 기본 팩토리는 get() 같은 메서드가 아니라 d[key] 조회에 사용됩니다.
다음 예제는 각 값을 해당 키 아래에 그룹화합니다:
from collections import defaultdict
pairs = [("rome", 1), ("paris", 2), ("newyork", 3), ("paris", 4), ("delhi", 1)]
grouped = defaultdict(list)
for key, value in pairs:
grouped[key].append(value)
print(dict(grouped))
이터러블인 키-값 쌍에서 매핑을 만들 때 이 방법을 사용하세요. 출력 전에 dict로 변환하면 defaultdict 형식 표시 없이 그룹화된 데이터를 볼 수 있습니다.
setdefault() 메서드를 사용해 사전의 특정 키에 여러 값 추가
setdefault()는 키에 이미 저장된 값을 반환합니다. 키가 없으면 지정한 기본값을 삽입한 뒤 그 값을 반환합니다. 기본 인수를 생략하면 기본값은 None입니다. 이 예제에서는 빈 리스트를 지정하므로 반환된 값에 append()를 사용할 수 있습니다.
pairs = [("rome", 1), ("paris", 2), ("newyork", 3), ("paris", 4), ("delhi", 1)]
data = {}
for key, value in pairs:
data.setdefault(key, []).append(value)
print(data)
각 입력 쌍에서 항목 하나씩 추가하는 간결한 반복문에는 setdefault()를 사용하세요. 초기화가 더 복잡하거나 같은 로직을 반복해서 사용한다면 도우미 함수나 defaultdict가 의도를 더 쉽게 유지 관리하도록 해 줄 수 있습니다.