2.9. 딕셔너리¶
딕셔너리(dictionary) 는 키(key) 를 값(value) 에 매핑한 것입니다. 각 키는 직접 조회되며, 딕셔너리는 그 키에 마지막으로 연결된 값이 무엇인지 기억합니다.
2.9.1. 딕셔너리 만들기¶
중괄호와 key: value 쌍을 사용하거나 dict 생성자를 사용하세요:
empty = {}
person = {"name": "OpenMV", "id": 42}
counts = dict(a=1, b=2, c=3) # keyword form
pairs = dict([("x", 1), ("y", 2)]) # from a list of pairs
값은 문자열, 숫자, 리스트, 심지어 다른 딕셔너리 등 어떤 타입이든 될 수 있습니다:
config = {
"name": "OpenMV",
"id": 42,
"width": 320,
"tags": ["red", "round"],
}
딕셔너리의 각 키는 정확히 하나의 값에 매핑됩니다.¶
2.9.2. 접근과 멤버십¶
[] 로 인덱싱하면 키에 해당하는 값을 가져옵니다. 존재하지 않는 키는 KeyError 를 발생시킵니다:
>>> person = {"name": "OpenMV", "id": 42}
>>> person["name"]
'OpenMV'
>>> person["missing"]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 'missing'
관대한 조회를 원한다면 dict.get() 을 사용하세요. 존재하지 않는 키에 대해 None 을 반환하거나, 두 번째 인자로 전달한 값을 반환합니다:
>>> person.get("name")
'OpenMV'
>>> person.get("missing") # returns None
>>> person.get("missing", "n/a")
'n/a'
in 키워드는 값이 아니라 키 의 멤버십을 검사합니다:
>>> "name" in person
True
>>> "OpenMV" in person
False
2.9.3. 추가, 갱신, 제거¶
d[key] 에 할당하면 키가 새것이면 항목이 추가되고, 이미 존재하면 덮어씁니다:
>>> person["seen"] = 1
>>> person["seen"] = 2 # overwrites
>>> person
{'name': 'OpenMV', 'id': 42, 'seen': 2}
제거에는 몇 가지 형태가 있습니다:
del d[key]– 항목을 제거합니다. 키가 없으면KeyError를 발생시킵니다.dict.pop()– 값을 제거하고 반환합니다. 선택적 기본값을 지정하면 예외를 피할 수 있습니다.dict.clear()– 모든 항목을 제거합니다.
dict.update() 는 다른 딕셔너리(또는 (key, value) 쌍의 리스트)를 대상에 병합하며, 일치하는 키를 덮어씁니다:
>>> person.update({"id": 100, "owner": "alice"})
>>> person
{'name': 'OpenMV', 'id': 100, 'seen': 2, 'owner': 'alice'}
2.9.4. 반복¶
딕셔너리를 직접 반복하면 삽입 순서대로 키가 나옵니다:
for k in person:
print(k)
세 가지 뷰가 명시적인 접근을 제공합니다:
dict.keys()– 키(딕셔너리를 반복하는 것과 동일).dict.values()– 값.dict.items()–(key, value)튜플로, 루프에서 언패킹하기에 안성맞춤입니다.
for key, value in person.items():
print(key, "=", value)
2.9.5. 키가 될 수 있는 것¶
딕셔너리 키는 해시 가능(hashable) 해야 합니다. 즉 수명 동안 값이 변하지 않아야 합니다. 흔한 해시 가능 타입은 다음과 같습니다:
list, dict, bytearray 같은 가변 타입은 키가 될 수 없으며, 이를 사용하면 TypeError 가 발생합니다. 불변 값의 튜플은 2차원 격자 좌표 같은 복합 식별자로 딕셔너리에 키를 매기는 표준적인 방법입니다:
>>> grid = {}
>>> grid[(0, 0)] = "start"
>>> grid[(5, 7)] = "end"
2.9.6. 길이¶
len() 은 항목의 개수를 반환합니다:
>>> len(person)
4