Python

딕셔너리 객체

type PyDictObject

PyObject의 서브 형은 파이썬 딕셔너리 객체를 나타냅니다.

PyTypeObject PyDict_Type
상의 안정 ABI.

PyTypeObject 인스턴스는 파이썬 딕셔너리 형을 나타냅니다. 이것은 파이썬 계층의 dict와 같은 객체입니다.

int PyDict_Check(PyObject *p)
Thread safety: Atomic.

p가 dict 객체이거나 dict 형의 서브 형의 인스턴스면 참을 반환합니다. 이 함수는 항상 성공합니다.

int PyDict_CheckExact(PyObject *p)
Thread safety: Atomic.

p가 dict 객체이지만, dict 형의 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.

PyObject *PyDict_New()
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

새로운 빈 딕셔너리를 반환하거나, 실패하면 NULL을 반환합니다.

PyObject *PyDictProxy_New(PyObject *mapping)
반환값: 새 참조. 상의 안정 ABI.

읽기 전용 동작을 강제하는 매핑을 위한 types.MappingProxyType 객체를 반환합니다. 이것은 일반적으로 비 동적 클래스 형을 위한 딕셔너리의 수정을 방지하기 위해 뷰를 만드는 데 사용됩니다.

첫 번째 인수는 dict, frozendict, 또는 매핑일 수 있습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyTypeObject PyDictProxy_Type
상의 안정 ABI.

PyDictProxy_New() 에 의해 생성된 매핑 프록시 객체 및 많은 기본형 타입의 읽기 전용 __dict__ 속성에 대한 타입 객체입니다. PyDictProxy_Type 인스턴스는 기본이 되는 딕셔너리의 동적이고 읽기 전용인 뷰를 제공합니다. 기본 딕셔너리의 변경 사항은 프록시에 반영되지만, 프록시 자체는 변경 작업을 지원하지 않습니다. 이는 파이썬의 types.MappingProxyType 에 해당합니다.

void PyDict_Clear(PyObject *p)
상의 안정 ABI. Thread safety: Atomic.

기존 딕셔너리의 모든 키-값 쌍을 비웁니다.

인수가 dict 또는 dict 서브클래스가 아닌 경우 아무것도 하지 마십시오.

int PyDict_Contains(PyObject *p, PyObject *key)
상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.

딕셔너리 pkey 가 포함되어 있는지 확인합니다. p 의 항목이 key 와 일치하면 1 을 반환하고, 그렇지 않으면 0 을 반환합니다. 에러 발생 시 -1 을 반환합니다. 이는 파이썬 표현식 key in p 와 동일합니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

참고

이 작업은 keystr, int, float, bool 또는 bytes 인 경우 free threading 에서 원자적입니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

int PyDict_ContainsString(PyObject *p, const char *key)
Thread safety: Atomic.

이것은 PyDict_Contains()와 같지만, keyPyObject*가 아닌 const char* UTF-8 인코딩된 바이트 문자열로 지정됩니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

Added in version 3.13.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject *PyDict_Copy(PyObject *p)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

p와 같은 키-값 쌍을 포함하는 새 딕셔너리를 반환합니다.

int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)
상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.

딕셔너리 pvalkey 키로 삽입합니다. key해시 가능해야 합니다. 그렇지 않으면 TypeError가 발생합니다. 성공하면 0을, 실패하면 -1을 반환합니다. 이 함수는 val에 대한 참조를 훔치지 않습니다.

참고

이 작업은 keystr, int, float, bool 또는 bytes 인 경우 free threading 에서 원자적입니다.

int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)
상의 안정 ABI. Thread safety: Atomic.

이것은 PyDict_SetItem()와 같지만, keyPyObject*가 아닌 const char* UTF-8 인코딩된 바이트 문자열로 지정됩니다.

int PyDict_DelItem(PyObject *p, PyObject *key)
상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.

딕셔너리 p에서 키가 key인 항목을 제거합니다. key해시 가능해야 합니다. 그렇지 않으면 TypeError가 발생합니다. key가 딕셔너리에 없으면, KeyError가 발생합니다. 성공하면 0을, 실패하면 -1을 반환합니다.

참고

이 작업은 keystr, int, float, bool 또는 bytes 인 경우 free threading 에서 원자적입니다.

int PyDict_DelItemString(PyObject *p, const char *key)
상의 안정 ABI. Thread safety: Atomic.

이것은 PyDict_DelItem()와 같지만, keyPyObject*가 아닌 const char* UTF-8 인코딩된 바이트 문자열로 지정됩니다.

int PyDict_GetItemRef(PyObject *p, PyObject *key, PyObject **result)
상의 안정 ABI 버전 3.13 이후로. Thread safety: Safe for concurrent use on the same object.

키가 key 인 딕셔너리 p 에서 객체에 대한 새로운 strong reference 를 반환합니다:

  • 키가 존재하면, *result 를 값에 대한 새로운 strong reference 로 설정하고 1 을 반환합니다.

  • 키가 누락되면, *resultNULL 로 설정하고 0 을 반환합니다.

  • 에러 발생 시 예외를 발생시키고, *resultNULL 로 설정한 다음에 -1 을 반환합니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

참고

이 작업은 keystr, int, float, bool 또는 bytes 인 경우 free threading 에서 원자적입니다.

Added in version 3.13.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject_GetItem() 함수를 참조하십시오.

PyObject *PyDict_GetItem(PyObject *p, PyObject *key)
반환값: 빌린 참조. 상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

딕셔너리 p에서 키가 key인 객체에 대한 빌린 참조를 반환합니다. key 키가 없으면 예외를 설정하지 않고 NULL을 반환합니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

참고

__hash__()__eq__() 메서드를 호출하는 동안 발생하는 예외는 조용히 무시됩니다. 대신 PyDict_GetItemWithError() 함수를 사용하십시오.

참고

:term:`free-threaded build`에서는 다른 스레드가 딕셔너리를 동시에 수정할 경우 반환된 :term:`borrowed reference`가 유효하지 않을 수 있습니다. :term:`strong reference`를 반환하는 :c:func:`PyDict_GetItemRef`를 사용하는 것이 좋습니다.

버전 3.10에서 변경: attached thread state 없이 이 API를 호출하는 것은 역사적인 이유로 허용되어 왔습니다. 이제는 허용되지 않습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key)
반환값: 빌린 참조. 상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

예외를 억제하지 않는 PyDict_GetItem()의 변형입니다. 예외가 발생하면 예외를 설정하고 NULL을 반환합니다. 키가 없으면 예외를 설정하지 않고 NULL을 반환합니다.

참고

:term:`free-threaded build`에서는 다른 스레드가 딕셔너리를 동시에 수정할 경우 반환된 :term:`borrowed reference`가 유효하지 않을 수 있습니다. :term:`strong reference`를 반환하는 :c:func:`PyDict_GetItemRef`를 사용하는 것이 좋습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject *PyDict_GetItemString(PyObject *p, const char *key)
반환값: 빌린 참조. 상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

이것은 PyDict_GetItem()와 같지만, keyPyObject*가 아닌 const char* UTF-8로 인코딩된 바이트 문자열로 지정됩니다.

참고

__hash__()__eq__() 메서드를 호출하는 동안이나 임시 str 객체를 만드는 동안 발생하는 예외는 조용히 무시됩니다. 대신 자체 PyUnicode_FromString() key와 함께 PyDict_GetItemWithError() 함수를 사용하는 것이 좋습니다.

참고

:term:`free-threaded build`에서는 다른 스레드가 딕셔너리를 동시에 수정할 경우 반환된 :term:`borrowed reference`가 유효하지 않을 수 있습니다. :term:`strong reference`를 반환하는 :c:func:`PyDict_GetItemStringRef`를 사용하는 것이 좋습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

int PyDict_GetItemStringRef(PyObject *p, const char *key, PyObject **result)
상의 안정 ABI 버전 3.13 이후로. Thread safety: Atomic.

이것은 PyDict_GetItemRef()와 유시하지만, keyPyObject*가 아닌 const char* UTF-8로 인코딩된 바이트 문자열로 지정됩니다.

Added in version 3.13.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)
반환값: 빌린 참조. Thread safety: Safe to call from multiple threads with external synchronization only.

이것은 파이썬 수준의 dict.setdefault()와 같습니다. 존재하면, 딕셔너리 p에서 key에 해당하는 값을 반환합니다. 키가 dict에 없으면, 값 defaultobj로 삽입되고, defaultobj가 반환됩니다. 이 함수는 key의 해시 함수를 조회 및 삽입을 위해 독립적으로 평가하는 대신 한 번만 평가합니다.

Added in version 3.4.

참고

:term:`free-threaded build`에서는 다른 스레드가 딕셔너리를 동시에 수정할 경우 반환된 :term:`borrowed reference`가 유효하지 않을 수 있습니다. :term:`strong reference`를 반환하는 :c:func:`PyDict_SetDefaultRef`를 사용하는 것이 좋습니다.

int PyDict_SetDefaultRef(PyObject *p, PyObject *key, PyObject *default_value, PyObject **result)
상의 안정 ABI 버전 3.15 이후로. Thread safety: Safe for concurrent use on the same object.

Inserts default_value into the dictionary p with a key of key if the key is not already present in the dictionary. If result is not NULL, then *result is set to a strong reference to either default_value, if the key was not present, or the existing value, if key was already present in the dictionary. Returns 1 if the key was present and default_value was not inserted, or 0 if the key was not present and default_value was inserted. On failure, returns -1, sets an exception, and sets *result to NULL.

명확하게 말씀드리자면: 이 함수를 호출하기 전에 default_value 에 대한 강한 참조를 가지고 있다면, 반환 후에도 당신은 default_value*result (NULL 이 아닌 경우) 모두에 대한 강한 참조를 보유하게 됩니다. 이는 동일한 객체를 참조할 수 있습니다: 이 경우 당신은 해당 객체에 대한 두 개의 별개 참조를 보유하게 됩니다.

참고

이 작업은 keystr, int, float, bool 또는 bytes 인 경우 free threading 에서 원자적입니다.

Added in version 3.13.

int PyDict_Pop(PyObject *p, PyObject *key, PyObject **result)
Thread safety: Safe for concurrent use on the same object.

딕셔너리 p 에서 key 를 제거하고 선택적으로 제거된 값을 반환합니다. 키가 누락된 경우 KeyError 를 발생시키지 않습니다.

  • 키가 존재하면, resultNULL 이 아닌 경우 제거된 값에 대한 새로운 참조를 *result 로 설정하고 1 을 반환합니다.

  • 키가 누락되면, resultNULL 이 아닌 경우 *resultNULL 로 설정하고 0 을 반환합니다.

  • 에러 발생 시 예외를 발생시키고 -1 을 반환합니다.

:meth:`dict.pop`과 유사하지만, 기본값이 없고 키가 누락되더라도 :exc:`KeyError`를 발생시키지 않습니다.

참고

이 작업은 keystr, int, float, bool 또는 bytes 인 경우 free threading 에서 원자적입니다.

Added in version 3.13.

int PyDict_PopString(PyObject *p, const char *key, PyObject **result)
Thread safety: Atomic.

이것은 PyDict_Pop()와 유사하지만, keyPyObject*가 아닌 const char* UTF-8로 인코딩된 바이트 문자열로 지정됩니다.

Added in version 3.13.

PyObject *PyDict_Items(PyObject *p)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

딕셔너리의 모든 항목을 포함하는 PyListObject를 반환합니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject *PyDict_Keys(PyObject *p)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

딕셔너리의 모든 키를 포함하는 PyListObject를 반환합니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

PyObject *PyDict_Values(PyObject *p)
반환값: 새 참조. 상의 안정 ABI. Thread safety: Atomic.

딕셔너리 p의 모든 값을 포함하는 PyListObject를 반환합니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

Py_ssize_t PyDict_Size(PyObject *p)
상의 안정 ABI. Thread safety: Atomic.

딕셔너리에 있는 항목의 수를 반환합니다. 이는 딕셔너리에 대한 len(p)와 동등합니다.

인수는 dict 또는 :class:`frozendict`일 수 있습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

Py_ssize_t PyDict_GET_SIZE(PyObject *p)
Thread safety: Atomic.

:c:func:`PyDict_Size`와 유사하지만, 에러 검사는 없습니다.

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
상의 안정 ABI. Thread safety: Safe to call from multiple threads with external synchronization only.

딕셔너리 p의 모든 키-값 쌍을 이터레이트 합니다. ppos에 의해 참조된 Py_ssize_t는, 이터레이션을 시작하기 위해 이 함수를 처음 호출하기 전에 0으로 초기화되어야 합니다; 이 함수는 딕셔너리의 각 쌍에 대해 참을 반환하고, 모든 쌍이 보고되었으면 거짓을 반환합니다. 매개 변수 pkeypvalue는 각각 키와 값으로 채울 PyObject* 변수를 가리 키거나, NULL 일 수 있습니다. 이들을 통해 반환된 참조는 모두 빌린(borrowed) 것입니다. 이터레이션 중에 ppos를 변경하면 안 됩니다. 이 값은 내부 딕셔너리 구조 내의 오프셋을 나타내며, 구조가 희박하므로 오프셋이 연속되지 않습니다.

첫 번째 인수는 dict 또는 :class:`frozendict`일 수 있습니다.

예를 들면:

PyObject *key, *value;
Py_ssize_t pos = 0;

while (PyDict_Next(self->dict, &pos, &key, &value)) {
    /* 값으로 흥미로운 작업을 수행합니다... */
    ...
}

딕셔너리 p는 이터레이션 중에 변경해서는 안 됩니다. 딕셔너리를 이터레이트 할 때 값을 변경하는 것은 안전하지만, 키 집합이 변경되지 않는 한만 그렇습니다. 예를 들면:

PyObject *key, *value;
Py_ssize_t pos = 0;

while (PyDict_Next(self->dict, &pos, &key, &value)) {
    long i = PyLong_AsLong(value);
    if (i == -1 && PyErr_Occurred()) {
        return -1;
    }
    PyObject *o = PyLong_FromLong(i + 1);
    if (o == NULL)
        return -1;
    if (PyDict_SetItem(self->dict, key, o) < 0) {
        Py_DECREF(o);
        return -1;
    }
    Py_DECREF(o);
}

이 함수는 가변적인 dict`에 대해 외부 동기화 없이는 :term:`free-threaded 빌드에서 스레드 안전하지 않습니다. 반복 시 딕셔너리를 잠그려면 :c:macro:`Py_BEGIN_CRITICAL_SECTION`을 사용할 수 있습니다:

Py_BEGIN_CRITICAL_SECTION(self->dict);
while (PyDict_Next(self->dict, &pos, &key, &value)) {
    ...
}
Py_END_CRITICAL_SECTION();

이 함수는 :class:`frozendict`에 대해 스레드 안전합니다.

참고

free-threaded 빌드에서 이 함수는 임계 섹션 내부에서 안전하게 사용할 수 있습니다. 하지만 pkeypvalue 에 대해 반환되는 참조는 borrowed 이며, 임계 섹션이 유지되는 동안에만 유효합니다. 이 객체들을 임계 섹션 외부에서 사용하거나 임계 섹션이 중단될 수 있는 경우, strong reference 를 생성해야 합니다 (예를 들어, Py_NewRef() 사용).

버전 3.15에서 변경: :class:`frozendict`도 허용합니다.

int PyDict_Merge(PyObject *a, PyObject *b, int override)
상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.

매핑 객체 b를 이터레이트 하면서, 키-값 쌍을 딕셔너리 a에 추가합니다. b는 딕셔너리거나 PyMapping_Keys()PyObject_GetItem()를 지원하는 모든 객체일 수 있습니다. override가 참이면, a에 있는 기존 쌍이 b에서 일치하는 키가 있으면 교체되고, 그렇지 않으면 a와 일치하는 키가 없을 때만 쌍이 추가됩니다. 성공하면 0을 반환하고, 예외가 발생하면 -1을 반환합니다.

참고

free-threaded build 에서 bdict (표준 반복자 포함)일 때, ab 모두 작업 시간 동안 잠깁니다. b 가 딕셔너리가 아닌 매핑인 경우, a 만 잠기며, b 는 다른 스레드에 의해 동시에 수정될 수 있습니다.

int PyDict_Update(PyObject *a, PyObject *b)
상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.

이는 C에서 PyDict_Merge(a, b, 1)와 같고, 두 번째 인자에 “keys” 어트리뷰트가 없을 때 PyDict_Update()가 키-값 쌍의 시퀀스에 대해 이터레이트 하지 않는다는 점만 제외하면, 파이썬에서 a.update(b)와 유사합니다. 성공하면 0을 반환하고, 예외가 발생하면 -1을 반환합니다.

참고

free-threaded build 에서 bdict (표준 반복자 포함)일 때, ab 모두 작업 시간 동안 잠깁니다. b 가 딕셔너리가 아닌 매핑인 경우, a 만 잠기며, b 는 다른 스레드에 의해 동시에 수정될 수 있습니다.

int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)
상의 안정 ABI. Thread safety: Safe for concurrent use on the same object.

seq2의 키-값 쌍으로 딕셔너리 a를 갱신하거나 병합합니다. seq2는 키-값 쌍으로 간주하는 길이 2의 이터러블 객체를 생성하는 이터러블 객체여야 합니다. 중복 키가 있으면, override가 참이면 마지막이 승리하고, 그렇지 않으면 첫 번째가 승리합니다. 성공 시 0을 반환하고, 예외가 발생하면 -1을 반환합니다. 동등한 파이썬은 이렇습니다(반환 값 제외)

def PyDict_MergeFromSeq2(a, seq2, override):
    for key, value in seq2:
        if override or key not in a:
            a[key] = value

참고

free-threaded 빌드에서 a 만 잠깁니다. seq2 를 반복하는 것은 동기화되지 않으며, seq2 는 다른 스레드에 의해 동시에 수정될 수 있습니다.

int PyDict_AddWatcher(PyDict_WatchCallback callback)
Thread safety: Safe to call from multiple threads with external synchronization only.

딕셔너리 감시자로 callback 을 등록합니다. 향후 PyDict_Watch() 호출에 전달되어야 하는 음수가 아닌 정수 ID를 반환합니다. 에러가 발생한 경우(예: 더 이상 감시자 ID를 사용할 수 없는 경우), -1 을 반환하고 예외를 설정합니다.

참고

이 함수는 내부적으로 동기화되어 있지 않습니다. free-threaded 빌드에서는 호출자가 PyDict_AddWatcher() 또는 :c:func:`PyDict_ClearWatcher`에 대한 동시 호출이 진행되지 않도록 보장해야 합니다.

Added in version 3.12.

int PyDict_ClearWatcher(int watcher_id)
Thread safety: Safe to call from multiple threads with external synchronization only.

PyDict_AddWatcher() 에서 이전에 반환된 watcher_id 로 식별된 감시자를 지웁니다. 성공 시 0 을, 에러 시 -1 을 반환합니다(예: 주어진 watcher_id 가 등록된 적이 없는 경우).

참고

이 함수는 내부적으로 동기화되어 있지 않습니다. free-threaded 빌드에서는 호출자가 PyDict_AddWatcher() 또는 :c:func:`PyDict_ClearWatcher`에 대한 동시 호출이 진행되지 않도록 보장해야 합니다.

Added in version 3.12.

int PyDict_Watch(int watcher_id, PyObject *dict)
Thread safety: Safe to call without external synchronization on distinct objects.

딕셔너리 dict 를 감시되는 것으로 표시합니다. PyDict_AddWatcher() 에 의해 부여된 watcher_id 의 콜백은 dict 가 수정되거나 할당 해제될 때 호출됩니다. 성공 시 0, 에러 시 -1 을 반환합니다.

Added in version 3.12.

int PyDict_Unwatch(int watcher_id, PyObject *dict)
Thread safety: Safe to call without external synchronization on distinct objects.

딕셔너리 dict 를 더 이상 감시되지 않는 것으로 표시합니다. PyDict_AddWatcher() 에 의해 부여된 watcher_id 의 콜백은 dict 가 수정되거나 할당 해제될 때 더 이상 호출되지 않습니다. 딕셔너리는 이 감시자에 의해 이전에 감시된 적이 있어야 합니다. 성공 시 0, 에러 시 -1 을 반환합니다.

Added in version 3.12.

type PyDict_WatchEvent

가능한 딕셔너리 감시자 이벤트의 열거: PyDict_EVENT_ADDED, PyDict_EVENT_MODIFIED, PyDict_EVENT_DELETED, PyDict_EVENT_CLONED, PyDict_EVENT_CLEARED, 또는 PyDict_EVENT_DEALLOCATED.

Added in version 3.12.

typedef int (*PyDict_WatchCallback)(PyDict_WatchEvent event, PyObject *dict, PyObject *key, PyObject *new_value)

딕셔너리 감시자 콜백 함수의 유형입니다.

eventPyDict_EVENT_CLEARED 또는 PyDict_EVENT_DEALLOCATED 이면, keynew_value 모두 NULL 이 됩니다. eventPyDict_EVENT_ADDED 또는 PyDict_EVENT_MODIFIED 이면, new_valuekey 의 새 값이 됩니다. eventPyDict_EVENT_DELETED 이면, key 는 딕셔너리에서 삭제되고 new_valueNULL 이 됩니다.

dict 가 이전에 비어 있었고 다른 딕셔너리가 여기에 병합될 때 PyDict_EVENT_CLONED 가 발생합니다. 이 작업의 효율성을 유지하기 위해, 이 경우에는 키별 PyDict_EVENT_ADDED 이벤트가 발행되지 않고 대신 단일 PyDict_EVENT_CLONED 가 발행되며, key 는 소스 딕셔너리가 됩니다.

콜백에서 dict 를 검사할 수는 있지만 수정해서는 안 됩니다. 그렇게 할 경우 무한 재귀를 포함하여 예측할 수 없는 효과를 가져올 수 있습니다. 콜백 내에서 Python 코드 실행을 트리거하지 마십시오. 사이드 이펙트로 딕셔너리를 수정할 수 있기 때문입니다.

eventPyDict_EVENT_DEALLOCATED 이면, 콜백에서 곧 파괴될 딕셔너리에 새로운 참조를 취하는 것은 이를 부활시키고 이 시점에 해제되는 것을 방지합니다. 부활된 객체가 나중에 파괴될 때, 그 시점에 활성화된 모든 감시자 콜백이 다시 호출됩니다.

콜백은 dict 에 대한 변경 통지 전에 발생하므로, dict 의 이전 상태를 검사할 수 있습니다.

If the callback sets an exception, it must return -1; this exception will be printed as an unraisable exception using PyErr_WriteUnraisable(). Otherwise it should return 0.

다른 메서드와 달리, 이 방법으로 추가된 콜백은 예외를 무시할 수 없습니다 (예외 세부 정보가 전달되지 않기 때문입니다).

Added in version 3.12.

딕셔너리 뷰 객체

int PyDictViewSet_Check(PyObject *op)

op が 딕셔너리 내의 집합의 뷰인지 확인합니다. 이는 현재 :c:expr:`PyDictKeys_Check(op) || PyDictItems_Check(op)`와 동일합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyDictKeys_Type
상의 안정 ABI.

딕셔너리 키 뷰의 타입 객체입니다. 파이썬에서 이것은 :meth:`dict.keys`에 의해 반환되는 객체의 타입입니다.

int PyDictKeys_Check(PyObject *op)

op が 딕셔너리 키 뷰의 인스턴스인지 확인합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyDictValues_Type
상의 안정 ABI.

딕셔너리 값 뷰의 타입 객체입니다. 파이썬에서 이것은 :meth:`dict.values`에 의해 반환되는 객체의 타입입니다.

int PyDictValues_Check(PyObject *op)

op が 딕셔너리 값 뷰의 인스턴스인지 확인합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyDictItems_Type
상의 안정 ABI.

딕셔너리 항목 뷰의 타입 객체입니다. 파이썬에서 이것은 :meth:`dict.items`에 의해 반환되는 객체의 타입입니다.

int PyDictItems_Check(PyObject *op)

op が 딕셔너리 항목 뷰의 인스턴스인지 확인합니다. 이 함수는 항상 성공합니다.

프리징(Frozen)된 딕셔너리 객체

Added in version 3.15.

PyTypeObject PyFrozenDict_Type

PyTypeObject 인스턴스는 파이썬의 프리징(frozen) 딕셔너리 타입을 나타냅니다. 이는 파이썬 계층의 frozendict 와 동일한 객체입니다.

int PyAnyDict_Check(PyObject *p)

pdict 객체이거나, frozendict 객체이거나, dict 또는 frozendict 타입의 서브 타입 인스턴스인지 확인합니다. 이 함수는 항상 성공합니다.

int PyAnyDict_CheckExact(PyObject *p)

pdict 객체이거나 frozendict 객체이지만, dict 또는 frozendict 타입의 서브 타입 인스턴스는 아님을 확인합니다. 이 함수는 항상 성공합니다.

int PyFrozenDict_Check(PyObject *p)

pfrozendict 객체이거나 frozendict 타입의 서브 타입 인스턴스인지 확인합니다. 이 함수는 항상 성공합니다.

int PyFrozenDict_CheckExact(PyObject *p)

pfrozendict 객체이지만, frozendict 타입의 서브 타입 인스턴스는 아님을 확인합니다. 이 함수는 항상 성공합니다.

PyObject *PyFrozenDict_New(PyObject *iterable)

이터러블로부터 새로운 frozendict 를 반환하거나, 예외가 설정된 경우 실패 시 NULL 을 반환합니다.

iterableNULL 인 경우 빈 딕셔너리를 생성합니다.

순서가 유지되는 딕셔너리

파이썬의 C API는 C로부터 collections.OrderedDict 에 대한 인터페이스를 제공합니다. 파이썬 3.7 이후로 딕셔너리는 기본적으로 순서가 유지되므로, 일반적으로 이 함수들에 대한 필요성이 거의 없습니다. 가능한 경우 PyDict* 를 사용하는 것이 좋습니다.

PyTypeObject PyODict_Type

순서가 유지되는 딕셔너리의 타입 객체입니다. 이는 파이썬 계층의 collections.OrderedDict 와 동일한 객체입니다.

int PyODict_Check(PyObject *od)

od 가 순서가 유지되는 딕셔너리 객체이거나, OrderedDict 타입의 서브 타입 인스턴스인지 확인합니다. 이 함수는 항상 성공합니다.

int PyODict_CheckExact(PyObject *od)

od 가 순서가 유지되는 딕셔너리 객체이지만, OrderedDict 타입의 서브 타입 인스턴스는 아님을 확인합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyODictKeys_Type

순서가 유지되는 딕셔너리에 대한 :c:type:`PyDictKeys_Type`와 유사합니다.

PyTypeObject PyODictValues_Type

순서가 유지되는 딕셔너리에 대한 :c:type:`PyDictValues_Type`와 유사합니다.

PyTypeObject PyODictItems_Type

순서가 유지되는 딕셔너리에 대한 :c:type:`PyDictItems_Type`와 유사합니다.

PyObject *PyODict_New(void)

새로운 빈 순서 유지 딕셔너리를 반환하거나, 실패 시 NULL 을 반환합니다.

:c:func:`PyDict_New`와 유사합니다.

int PyODict_SetItem(PyObject *od, PyObject *key, PyObject *value)

key 키를 사용하여 순서 유지 딕셔너리 odvalue 를 삽입합니다. 성공하면 0 을, 실패하면 예외가 설정된 상태로 -1 을 반환합니다.

:c:func:`PyDict_SetItem`와 유사합니다.

int PyODict_DelItem(PyObject *od, PyObject *key)

순서 유지 딕셔너리 od 에서 key 키를 가진 항목을 제거합니다. 성공하면 0 을, 실패하면 예외가 설정된 상태로 -1 을 반환합니다.

:c:func:`PyDict_DelItem`와 유사합니다.

다음은 PyDict API에 대한 soft deprecated 별칭들입니다:

PyODict

PyDict

PyODict_GetItem(od, key)

PyDict_GetItem()

PyODict_GetItemWithError(od, key)

PyDict_GetItemWithError()

PyODict_GetItemString(od, key)

PyDict_GetItemString()

PyODict_Contains(od, key)

PyDict_Contains()

PyODict_Size(od)

PyDict_Size()

PyODict_SIZE(od)

PyDict_GET_SIZE()

분실물 보관소