딕셔너리 객체¶
-
PyTypeObject
PyDict_Type
¶ 이
PyTypeObject
인스턴스는 파이썬 딕셔너리 형을 나타냅니다. 이것은 파이썬 계층의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
객체를 반환합니다. 이것은 일반적으로 비 동적 클래스 형을 위한 딕셔너리의 수정을 방지하기 위해 뷰를 만드는 데 사용됩니다.
-
int
PyDict_Contains
(PyObject *p, PyObject *key)¶ 딕셔너리 p에 key가 포함되어 있는지 확인합니다. p의 항목이 key와 일치하면
1
을 반환하고, 그렇지 않으면0
을 반환합니다. 에러면-1
을 반환합니다. 이는 파이썬 표현식key in p
와 동등합니다.
-
int
PyDict_SetItem
(PyObject *p, PyObject *key, PyObject *val)¶ 딕셔너리 p에 value를 key 키로 삽입합니다. key는 해시 가능해야 합니다. 그렇지 않으면
TypeError
가 발생합니다. 성공하면0
을, 실패하면-1
을 반환합니다.
-
int
PyDict_SetItemString
(PyObject *p, const char *key, PyObject *val)¶ key를 키로 사용하여 딕셔너리 p에 value를 삽입합니다. key는
const 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. ReturnNULL
with an exception set if an exception occurred. ReturnNULL
without an exception set if the key wasn’t present.
-
PyObject*
PyDict_GetItemString
(PyObject *p, const char *key)¶ - Return value: Borrowed reference.
이것은
PyDict_GetItem()
와 같지만, key가PyObject*
가 아닌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
를 반환합니다.
-
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 to0
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 toPyObject*
variables that will be filled in with each key and value, respectively, or may beNULL
. 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에 추가.