딕셔너리 객체¶
-
PyTypeObject
PyDict_Type
¶ 이
PyTypeObject
인스턴스는 파이썬 딕셔너리 형을 나타냅니다. 이것은 파이썬 계층의dict
와 같은 객체입니다.
-
int
PyDict_CheckExact
(PyObject *p)¶ p가 dict 객체이지만, dict 형의 서브 형의 인스턴스는 아니면 참을 반환합니다. 이 함수는 항상 성공합니다.
-
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에 val을 key 키로 삽입합니다. key는 해시 가능해야 합니다. 그렇지 않으면
TypeError
가 발생합니다. 성공하면0
을, 실패하면-1
을 반환합니다. 이 함수는 val에 대한 참조를 훔치지 않습니다.
-
int
PyDict_SetItemString
(PyObject *p, const char *key, PyObject *val)¶ key를 키로 사용하여 딕셔너리 p에 val을 삽입합니다. key는
const char*
여야 합니다. 키 객체는PyUnicode_FromString(key)
를 사용하여 만듭니다. 성공하면0
을, 실패하면-1
을 반환합니다. 이 함수는 val에 대한 참조를 훔치지 않습니다.
-
int
PyDict_DelItem
(PyObject *p, PyObject *key)¶ 딕셔너리 p에서 키가 key인 항목을 제거합니다. key는 해시 가능해야 합니다. 그렇지 않으면
TypeError
가 발생합니다. key가 딕셔너리에 없으면,KeyError
가 발생합니다. 성공하면0
을, 실패하면-1
을 반환합니다.
-
int
PyDict_DelItemString
(PyObject *p, const char *key)¶ 딕셔너리 p에서 문자열 key로 지정된 키의 항목을 제거합니다. key가 딕셔너리에 없으면,
KeyError
가 발생합니다. 성공하면0
을, 실패하면-1
을 반환합니다.
-
PyObject*
PyDict_GetItem
(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference.
딕셔너리 p에서 키가 key인 객체를 반환합니다. key 키가 없으면 예외를 설정하지 않고
NULL
을 반환합니다.__hash__()
와__eq__()
메서드를 호출하는 동안 발생하는 예외는 억제됩니다. 에러 보고를 얻으려면 대신PyDict_GetItemWithError()
를 사용하십시오.
-
PyObject*
PyDict_GetItemWithError
(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference.
예외를 억제하지 않는
PyDict_GetItem()
의 변형입니다. 예외가 발생하면 예외를 설정하고NULL
을 반환합니다. 키가 없으면 예외를 설정하지 않고NULL
을 반환합니다.
-
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)¶ 딕셔너리 p의 모든 키-값 쌍을 이터레이트 합니다. ppos에 의해 참조된
Py_ssize_t
는, 이터레이션을 시작하기 위해 이 함수를 처음 호출하기 전에0
으로 초기화되어야 합니다; 이 함수는 딕셔너리의 각 쌍에 대해 참을 반환하고, 모든 쌍이 보고되었으면 거짓을 반환합니다. 매개 변수 pkey와 pvalue는 각각 키와 값으로 채울PyObject*
변수를 가리 키거나,NULL
일 수 있습니다. 이들을 통해 반환된 참조는 모두 빌린(borrowed) 것입니다. 이터레이션 중에 ppos를 변경하면 안 됩니다. 이 값은 내부 딕셔너리 구조 내의 오프셋을 나타내며, 구조가 희박하므로 오프셋이 연속되지 않습니다.예를 들면:
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