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 또는 매핑(mapping)이 될 수 있습니다.

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

PyTypeObject PyDictProxy_Type
…의 일부 안정 ABI.

PyDictProxy_New() 에 의해 생성된 매핑 프록시 객체와 많은 내장형 타입의 읽기 전용 __dict__ 속성에 대한 타입 객체입니다. PyDictProxy_Type 인스턴스는 기반 딕셔너리에 대한 동적이며 읽기 전용인 뷰를 제공합니다. 즉, 기본 딕셔너리의 변경 사항은 프록시에도 반영되지만, 프록스 자체는 변형(mutation) 작업을 지원하지 않습니다. 이는 파이썬의 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 또는 frozendict 일 수 있습니다.

참고

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

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

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

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

첫 번째 인자는 dict 또는 frozendict 일 수 있습니다.

Added in version 3.13.

버전 3.15에서 변경: 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.

valkey 키로 딕셔너리 p 에 삽입합니다. keyhashable 이어야 하며, 그렇지 않을 경우 TypeError 가 발생합니다. 성공하면 0 을, 실패하면 -1 을 반환합니다. 이 함수는 val 에 대한 참조를 “steal “하지 않습니다.

참고

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 또는 frozendict 일 수 있습니다.

참고

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

Added in version 3.13.

버전 3.15에서 변경: 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 또는 frozendict 일 수 있습니다.

참고

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

참고

In the free-threaded build, the returned borrowed reference may become invalid if another thread modifies the dictionary concurrently. Prefer PyDict_GetItemRef(), which returns a strong reference.

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

버전 3.15에서 변경: 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을 반환합니다.

참고

In the free-threaded build, the returned borrowed reference may become invalid if another thread modifies the dictionary concurrently. Prefer PyDict_GetItemRef(), which returns a strong reference.

버전 3.15에서 변경: 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() 함수를 사용하는 것이 좋습니다.

참고

In the free-threaded build, the returned borrowed reference may become invalid if another thread modifies the dictionary concurrently. Prefer PyDict_GetItemStringRef(), which returns a strong reference.

버전 3.15에서 변경: 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에서 변경: 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.

참고

In the free-threaded build, the returned borrowed reference may become invalid if another thread modifies the dictionary concurrently. Prefer PyDict_SetDefaultRef(), which returns a strong reference.

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 을 반환합니다.

dict.pop() 과 유사하지만, 기본값이 없으며 키가 없을 때 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 또는 frozendict 일 수 있습니다.

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

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

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

첫 번째 인자는 dict 또는 frozendict 일 수 있습니다.

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

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

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

첫 번째 인자는 dict 또는 frozendict 일 수 있습니다.

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

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

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

인자는 dict 또는 frozendict 가 될 수 있습니다.

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

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

PyDict_Size() 와 유사하지만 오류 검사가 포함되지 않습니다.

버전 3.15에서 변경: 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 또는 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);
}

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

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

이 함수는 frozendict 에서 스레드 안전합니다.

참고

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

버전 3.15에서 변경: 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() 또는 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 을 반환하고, 오류 발생 시(예를 들어, 주어진 watcher_id 가 등록된 적이 없는 경우) -1 을 반환합니다.

참고

이 함수는 내부적으로 동기화되지 않습니다. free-threaded 빌드에서 호출자는 PyDict_AddWatcher() 또는 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 입니다.

PyDict_EVENT_CLONEDdict 가 이전에 비어 있었고 다른 딕셔너리가 병합될 때 발생합니다. 이 연산의 효율성을 유지하기 위해, 이 경우 키당 PyDict_EVENT_ADDED 이벤트는 생성되지 않고 단일한 PyDict_EVENT_CLONED 만 발생하며, key 는 소스 딕셔너리가 됩니다.

콜백은 dict 를 검사할 수 있지만 수정해서는 안 됩니다. 이를 수행하면 무한 재귀를 포함하여 예측할 수 없는 영향이 발생할 수 있습니다. 콜백 내에서 파이썬 코드를 실행하지 마십시오. 부수 효과로 딕셔너리가 변경될 수 있기 때문입니다.

eventPyDict_EVENT_DEALLOCATED 인 경우, 콜백에서 파괴될 예정인 딕셔너리에 대한 새로운 참조를 가져오면 해당 객체가 다시 살아나며(resurrect) 현재 시점에서 해제되는 것을 방지합니다. 나중에 이 복구된 객체가 파괴될 때, 해당 시점에 활성화된 모든 감시 콜백이 다시 호출됩니다.

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

콜백이 예외를 설정하는 경우 반드시 -1 을 반환해야 합니다. 이 예외는 PyErr_WriteUnraisable() 을 사용하여 발생할 수 없는 예외로 출력됩니다. 그렇지 않은 경우에는 0 을 반환해야 합니다.

콜백 진입 시 이미 설정된 대기 중인 예외가 있을 수 있습니다. 이 경우 콜백은 동일한 예외가 설정된 상태로 0 을 반환해야 합니다. 이는 콜백이 먼저 예외 상태를 저장하고 삭제한 후, 반환하기 전에 이를 복구하지 않는 한 예외를 설정할 수 있는 다른 API를 호출해서는 안 된다는 것을 의미합니다.

Added in version 3.12.

딕셔너리 뷰 객체

int PyDictViewSet_Check(PyObject *op)

op 이 딕셔너리 내부 집합의 뷰인 경우 참을 반환합니다. 이는 현재 PyDictKeys_Check(op) || PyDictItems_Check(op) 와 동일합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyDictKeys_Type
…의 일부 안정 ABI.

딕셔너리 키 뷰에 대한 타입 객체입니다. 파이썬에서 이는 dict.keys() 가 반환하는 객체의 타입과 같습니다.

int PyDictKeys_Check(PyObject *op)

op 이 딕셔너리 키 뷰의 인스턴스인 경우 참을 반환합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyDictValues_Type
…의 일부 안정 ABI.

딕셔너리 값 뷰에 대한 타입 객체입니다. 파이썬에서 이는 dict.values() 가 반환하는 객체의 타입과 같습니다.

int PyDictValues_Check(PyObject *op)

op 이 딕셔너리 값 뷰의 인스턴스인 경우 참을 반환합니다. 이 함수는 항상 성공합니다.

PyTypeObject PyDictItems_Type
…의 일부 안정 ABI.

딕셔너리 항목(item) 뷰에 대한 타입 객체입니다. 파이썬에서 이는 dict.items() 가 번환하는 객체의 타입과 같습니다.

int PyDictItems_Check(PyObject *op)

op 이 딕셔너리 항목 뷰의 인스턴스인 경우 참을 반환합니다. 이 함수는 항상 성공합니다.

동결된(Frozen) 딕셔너리 객체

Added in version 3.15.

PyTypeObject PyFrozenDict_Type

PyTypeObject 인스턴스는 파이썬의 동결된 딕셔너리 형(type)을 나타냅니다. 이는 파이썬 레이어의 frozendict 와 동일한 객체입니다.

int PyAnyDict_Check(PyObject *p)

pdict 객체이거나, frozendict 객체이거나, 혹은 dict 또는 frozendict 형의 서브형 인스턴스인 경우 참을 반환합니다. 이 함수는 항상 성공합니다.

int PyAnyDict_CheckExact(PyObject *p)

pdict 객체 또는 frozendict 객체이지만, dictfrozendict 형의 서브형 인스턴스가 아닌 경우 참을 반환합니다. 이 함수는 항상 성공합니다.

int PyFrozenDict_Check(PyObject *p)

pfrozendict 객체이거나 frozendict 형의 서브형 인스턴스인 경우 참을 반환합니다. 이 함수는 항상 성공합니다.

int PyFrozenDict_CheckExact(PyObject *p)

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

PyObject *PyFrozenDict_New(PyObject *iterable)

반복 가능 객체(iterable)로부터 새로운 frozendict 를 반환하며, 실패 시 예외와 함께 NULL 을 반환합니다.

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

순서 있는 딕셔너리(Ordered dictionaries)

파이썬의 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

순서 있는 딕셔너리에 대한 PyDictKeys_Type 과 유사합니다.

PyTypeObject PyODictValues_Type

순서 있는 딕셔너리에 대한 PyDictValues_Type 과 유사합니다.

PyTypeObject PyODictItems_Type

순서 있는 딕셔너리에 대한 PyDictItems_Type 과 유사합니다.

PyObject *PyODict_New(void)

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

이것은 PyDict_New() 와 유사합니다.

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

key 라는 키로 value 를 순서 있는 딕셔너리 od 에 삽입합니다. 성공 시 0 을 반환하고, 실패 시 예외와 함께 -1 을 반환합니다.

이것은 PyDict_SetItem() 과 유사합니다.

int PyODict_DelItem(PyObject *od, PyObject *key)

순서 있는 딕셔너리 od 에서 key 를 가진 항목을 제거합니다. 성공 시 0 을 반환하고, 실패 시 예외와 함께 -1 을 반환합니다.

이것은 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()

분실물 보관소