딕셔너리 객체

PyDictObject

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

PyTypeObject PyDict_Type

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

int PyDict_Check(PyObject *p)

p가 dict 객체이거나 dict 형의 서브 형의 인스턴스면 참을 반환합니다.

int PyDict_CheckExact(PyObject *p)

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

PyObject* PyDict_New()
Return value: New reference.

Return a new empty dictionary, or NULL on failure.

PyObject* PyDictProxy_New(PyObject *mapping)
Return value: New reference.

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

void PyDict_Clear(PyObject *p)

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

int PyDict_Contains(PyObject *p, PyObject *key)

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

PyObject* PyDict_Copy(PyObject *p)
Return value: New reference.

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

int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)

딕셔너리 pvaluekey 키로 삽입합니다. key해시 가능해야 합니다. 그렇지 않으면 TypeError가 발생합니다. 성공하면 0을, 실패하면 -1을 반환합니다.

int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)

key를 키로 사용하여 딕셔너리 pvalue를 삽입합니다. keyconst char*여야 합니다. 키 객체는 PyUnicode_FromString(key)를 사용하여 만듭니다. 성공하면 0을, 실패하면 -1을 반환합니다.

int PyDict_DelItem(PyObject *p, PyObject *key)

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

int PyDict_DelItemString(PyObject *p, const char *key)

딕셔너리 p에서 문자열 key로 지정된 키의 항목을 제거합니다. 성공하면 0을, 실패하면 -1을 반환합니다.

PyObject* PyDict_GetItem(PyObject *p, PyObject *key)
Return value: Borrowed reference.

Return the object from dictionary p which has a key key. Return NULL if the key key is not present, but without setting an exception.

__hash__()__eq__() 메서드를 호출하는 동안 발생하는 예외는 억제됩니다. 에러 보고를 얻으려면 대신 PyDict_GetItemWithError()를 사용하십시오.

PyObject* PyDict_GetItemWithError(PyObject *p, PyObject *key)
Return value: Borrowed reference.

Variant of PyDict_GetItem() that does not suppress exceptions. Return NULL with an exception set if an exception occurred. Return NULL without an exception set if the key wasn’t present.

PyObject* PyDict_GetItemString(PyObject *p, const char *key)
Return value: Borrowed reference.

이것은 PyDict_GetItem()와 같지만, keyPyObject*가 아닌 const char*로 지정됩니다.

__hash__()__eq__() 메서드를 호출하고 임시 문자열 객체를 만드는 동안 발생하는 예외는 억제됩니다. 에러 보고를 얻으려면 대신 PyDict_GetItemWithError()를 사용하십시오.

PyObject* PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)
Return value: Borrowed reference.

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

버전 3.4에 추가.

PyObject* PyDict_Items(PyObject *p)
Return value: New reference.

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

PyObject* PyDict_Keys(PyObject *p)
Return value: New reference.

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

PyObject* PyDict_Values(PyObject *p)
Return value: New reference.

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

Py_ssize_t PyDict_Size(PyObject *p)

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

int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)

Iterate over all key-value pairs in the dictionary p. The Py_ssize_t referred to by ppos must be initialized to 0 prior to the first call to this function to start the iteration; the function returns true for each pair in the dictionary, and false once all pairs have been reported. The parameters pkey and pvalue should either point to PyObject* variables that will be filled in with each key and value, respectively, or may be NULL. Any references returned through them are borrowed. ppos should not be altered during iteration. Its value represents offsets within the internal dictionary structure, and since the structure is sparse, the offsets are not consecutive.

예를 들면:

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

while (PyDict_Next(self->dict, &pos, &key, &value)) {
    /* do something interesting with the values... */
    ...
}

딕셔너리 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);
}
int PyDict_Merge(PyObject *a, PyObject *b, int override)

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

int PyDict_Update(PyObject *a, PyObject *b)

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

int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)

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
int PyDict_ClearFreeList()

자유 목록(free list)을 비웁니다. 해제된 항목의 총수를 반환합니다.

버전 3.3에 추가.