Объекты словарей¶Dictionary Objects
- PyTypeObject PyDict_Type¶
Этот экземпляр PyTypeObject представляет тип словаря Python. Он доступен программам на Python как dict и types.DictType.
- int PyDict_Check(PyObject *p)¶
- Возвращает true, если p является объектом dict или экземпляром подтипа типа dict.
- int PyDict_CheckExact(PyObject *p)¶
- Возвращает истину, если p является объектом словаря, но не экземпляром подтипа типа dict.
- PyObject* PyDict_New()¶
- Возвращаемое значение: новая ссылка.
Возвращает новый пустой словарь или NULL в случае ошибки.
- PyObject* PyDictProxy_New(PyObject *dict)¶
- Возвращаемое значение: новая ссылка.
Возвращает прокси-объект для отображения, обеспечивающий доступ только для чтения. Обычно используется для создания прокси, предотвращающего изменение словаря для нединамических типов классов.
- int PyDict_Contains(PyObject *p, PyObject *key)¶
- Определяет, содержит ли словарь p ключ key. Если элемент в p совпадает с key, возвращает 1, в противном случае возвращает 0. При ошибке возвращает -1. Эквивалентно выражению Python key in p.
- PyObject* PyDict_Copy(PyObject *p)¶
- Возвращаемое значение: новая ссылка.
Возвращает новый словарь, содержащий те же пары ключ-значение, что и p.
- int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)¶
- Вставляет value в словарь p с ключом key. key должен быть хэшируемым; если это не так, возбуждается TypeError. Возвращает 0 при успехе или -1 при неудаче.
- int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)¶
Вставляет value в словарь p, используя key в качестве ключа. key должен быть типа char*. Объект ключа создаётся с помощью PyString_FromString(key). Возвращает 0 при успехе или -1 при неудаче.
- int PyDict_DelItem(PyObject *p, PyObject *key)¶
- Удаляет запись из словаря p с ключом key. key должен быть хэшируемым; если это не так, возбуждается TypeError. Возвращает 0 при успехе или -1 при неудаче.
- int PyDict_DelItemString(PyObject *p, char *key)¶
- Удаляет запись из словаря p, ключ которой задаётся строкой key. Возвращает 0 при успехе или -1 при неудаче.
- PyObject* PyDict_GetItem(PyObject *p, PyObject *key)¶
- Возвращаемое значение: заимствованная ссылка.
Возвращает объект из словаря p, имеющий ключ key. Возвращает NULL, если ключ key отсутствует, но без установки исключения.
- PyObject* PyDict_GetItemWithError(PyObject *p, PyObject *key)¶
- Вариант PyDict_GetItem, который не подавляет исключения. Возвращает NULL с установленным исключением, если произошла ошибка. Возвращает NULL без установленного исключения, если ключ отсутствовал.
- PyObject* PyDict_GetItemString(PyObject *p, const char *key)¶
- Возвращаемое значение: заимствованная ссылка.
То же самое, что PyDict_GetItem, но key задаётся как char*, а не как PyObject*.
- PyObject* PyDict_Items(PyObject *p)¶
- Возвращаемое значение: новая ссылка.
Возвращает PyListObject, содержащий все элементы словаря, как и метод словаря dict.items().
- PyObject* PyDict_Keys(PyObject *p)¶
- Возвращаемое значение: новая ссылка.
Возвращает PyListObject, содержащий все ключи словаря, как и метод словаря dict.keys().
- PyObject* PyDict_Values(PyObject *p)¶
- Возвращаемое значение: новая ссылка.
Возвращает PyListObject, содержащий все значения из словаря p, как в методе словаря dict.values().
- Py_ssize_t PyDict_Size(PyObject *p)¶
Возвращает количество элементов в словаре. Это эквивалентно len(p) для словаря.
- int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)¶
Проходит по всем парам ключ-значение в словаре p. Переменная типа int, на которую ссылается ppos, должна быть инициализирована значением 0 до первого вызова этой функции для начала итерации; функция возвращает true для каждой пары в словаре и false после того, как все пары были выданы. Параметры pkey и pvalue должны либо указывать на переменные типа PyObject*, которые будут заполнены ключом и значением соответственно, либо могут быть NULL. Любые возвращаемые через них ссылки являются заимствованными. ppos не должен изменяться во время итерации. Его значение представляет смещения во внутренней структуре словаря, и, поскольку структура разреженная, эти смещения не являются последовательными.
Например:
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); }
- 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)¶
- То же самое, что PyDict_Merge(a, b, 1) в C, или a.update(b) в Python. Возвращает 0 при успехе или -1, если было возбуждено исключение.
- int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)¶
Обновляет или сливает словарь a из пар ключ-значение в seq2. seq2 должен быть итерируемым объектом, который порождает итерируемые объекты длины 2, рассматриваемые как пары ключ-значение. В случае дублирования ключей последний побеждает, если override истинно, иначе побеждает первый. Возвращает 0 при успехе или -1, если было возбуждено исключение. Эквивалентный код Python (за исключением возвращаемого значения):
def PyDict_MergeFromSeq2(a, seq2, override): for key, value in seq2: if override or key not in a: a[key] = value