Объекты-словари
-
type PyDictObject -
Этот подтип
PyObjectпредставляет объект-словарь Python.
-
PyTypeObject PyDict_Type -
Часть стабильного ABI.
Этот экземпляр
PyTypeObjectпредставляет тип словаря Python. Это тот же объект, что иdictна уровне Python.
-
int PyDict_Check(PyObject *p) -
Возвращает true, если p — объект dict или экземпляр подтипа типа dict. Эта функция всегда завершается успешно.
-
int PyDict_CheckExact(PyObject *p) -
Возвращает true, если p — объект dict, но не экземпляр подтипа типа dict. Эта функция всегда завершается успешно.
-
PyObject *PyDict_New() -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает новый пустой словарь или
NULLв случае ошибки.
-
PyObject *PyDictProxy_New(PyObject *mapping) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает объект
types.MappingProxyTypeдля отображения, обеспечивающего доступ только для чтения. Обычно он используется для создания представления, предотвращающего изменение словаря для статических типов классов.
-
void PyDict_Clear(PyObject *p) -
Часть стабильного ABI.
Удаляет из существующего словаря все пары «ключ — значение».
-
int PyDict_Contains(PyObject *p, PyObject *key) -
Часть стабильного ABI.
Проверяет, содержит ли словарь p ключ key. Если элемент в p совпадает с key, возвращает
1, в противном случае возвращает0. При ошибке возвращает-1. Эквивалентно выражению Pythonkey in p.
-
PyObject *PyDict_Copy(PyObject *p) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает новый словарь, содержащий те же пары «ключ — значение», что и p.
-
int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val) -
Часть стабильного ABI.
Вставляет val в словарь p под ключом key. key должен быть хешируемым; в противном случае будет вызвано исключение
TypeError. При успешном выполнении возвращает0, при ошибке —-1. Эта функция не забирает ссылку на val.
-
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val) -
Часть стабильного ABI.
Работает так же, как
PyDict_SetItem(), но key задаётся строкой байтов в кодировке UTF-8 типа const char*, а не объектом типа PyObject*.
-
int PyDict_DelItem(PyObject *p, PyObject *key) -
Часть стабильного ABI.
Удаляет из словаря p запись с ключом key. key должен быть хешируемым; в противном случае вызывается исключение
TypeError. Если key отсутствует в словаре, вызывается исключениеKeyError. При успешном выполнении возвращает0, при ошибке —-1.
-
int PyDict_DelItemString(PyObject *p, const char *key) -
Часть стабильного ABI.
Работает так же, как
PyDict_DelItem(), но key задаётся строкой байтов в кодировке UTF-8 типа const char*, а не объектом типа PyObject*.
-
PyObject *PyDict_GetItem(PyObject *p, PyObject *key) -
Возвращаемое значение: заимствованная ссылка.Часть стабильного ABI.
Возвращает объект из словаря p, соответствующий ключу key. Если ключ key отсутствует, возвращает
NULL, но не устанавливает исключение.Примечание
Исключения, возникающие при вызове этой функцией методов
__hash__()и__eq__(), игнорируются без уведомления. Вместо этого предпочтительно использовать функциюPyDict_GetItemWithError().Изменено в версии 3.10: Ранее по историческим причинам этот API разрешалось вызывать без захваченного GIL. Теперь это запрещено.
-
PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key) -
Возвращаемое значение: заимствованная ссылка.Часть стабильного ABI.
Вариант
PyDict_GetItem(), который не подавляет исключения. ВозвращаетNULLс установленным исключением, если произошло исключение. ВозвращаетNULLбез установленного исключения, если ключ отсутствует.
-
PyObject *PyDict_GetItemString(PyObject *p, const char *key) -
Возвращаемое значение: заимствованная ссылка.Часть стабильного ABI.
Работает так же, как
PyDict_GetItem(), но key задаётся строкой байтов в кодировке UTF-8 типа const char*, а не объектом типа PyObject*.Примечание
Исключения, возникающие при вызове этой функцией методов
__hash__()и__eq__()или при создании временного объектаstr, игнорируются без уведомления. Вместо этого предпочтительно использовать функциюPyDict_GetItemWithError()с собственным ключом key, созданным с помощьюPyUnicode_FromString().
-
PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj) -
Возвращаемое значение: заимствованная ссылка.
Работает так же, как
dict.setdefault()на уровне Python. Если ключ присутствует, возвращает соответствующее ему значение из словаря p. Если ключ отсутствует в словаре, он добавляется со значением defaultobj, и возвращается defaultobj. Эта функция вычисляет хеш-функцию для key только один раз, а не отдельно для поиска и вставки.Добавлено в версии 3.4.
-
PyObject *PyDict_Items(PyObject *p) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает объект
PyListObject, содержащий все элементы словаря.
-
PyObject *PyDict_Keys(PyObject *p) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает объект
PyListObject, содержащий все ключи словаря.
-
PyObject *PyDict_Values(PyObject *p) -
Возвращаемое значение: новая ссылка.Часть стабильного ABI.
Возвращает объект
PyListObject, содержащий все значения словаря p.
-
Py_ssize_t PyDict_Size(PyObject *p) -
Часть стабильного ABI.
Возвращает количество элементов в словаре. Эквивалентно
len(p)для словаря.
-
int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) -
Часть стабильного ABI.
Перебирает все пары «ключ — значение» в словаре p. Перед первым вызовом этой функции для начала перебора значение
Py_ssize_t, на которое указывает 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)) { /* 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) -
Часть стабильного ABI.
Перебирает объект-отображение b, добавляя пары «ключ — значение» в словарь a. b может быть словарём или любым объектом, поддерживающим
PyMapping_Keys()иPyObject_GetItem(). Если override имеет значение true, существующие пары в a будут заменены при обнаружении совпадающего ключа в b; в противном случае пары будут добавлены, только если совпадающего ключа нет в a. При успешном выполнении возвращает0, а если было вызвано исключение —-1.
-
int PyDict_Update(PyObject *a, PyObject *b) -
Часть стабильного ABI.
В языке C эта функция работает так же, как
PyDict_Merge(a, b, 1), а в Python похожа наa.update(b), за исключением того, чтоPyDict_Update()не переходит к перебору последовательности пар «ключ — значение», если у второго аргумента нет атрибута «keys». При успешном выполнении возвращает0, а если было вызвано исключение —-1.
-
int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override) -
Часть стабильного ABI.
Обновляет словарь a или объединяет с ним пары «ключ — значение» из seq2. seq2 должен быть итерируемым объектом, который порождает итерируемые объекты длины 2, рассматриваемые как пары «ключ — значение». При дублировании ключей побеждает последний, если override имеет значение true; в противном случае побеждает первый. При успешном выполнении возвращает
0, а если было вызвано исключение —-1. Эквивалентный код на Python (за исключением возвращаемого значения):def PyDict_MergeFromSeq2(a, seq2, override): for key, value in seq2: if override or key not in a: a[key] = value
-
int PyDict_AddWatcher(PyDict_WatchCallback callback) -
Регистрирует callback как функцию обратного вызова — наблюдателя словаря. Возвращает неотрицательный целочисленный идентификатор, который необходимо передавать в последующие вызовы
PyDict_Watch(). В случае ошибки (например, если идентификаторы наблюдателей закончились) возвращает-1и устанавливает исключение.Добавлено в версии 3.12.
-
int PyDict_ClearWatcher(int watcher_id) -
Удаляет наблюдателя с идентификатором watcher_id, ранее возвращённым функцией
PyDict_AddWatcher(). При успешном выполнении возвращает0, при ошибке —-1(например, если указанный watcher_id никогда не регистрировался).Добавлено в версии 3.12.
-
int PyDict_Watch(int watcher_id, PyObject *dict) -
Помечает словарь dict как отслеживаемый. Функция обратного вызова, назначенная идентификатору watcher_id функцией
PyDict_AddWatcher(), будет вызвана при изменении или освобождении dict. При успешном выполнении возвращает0, при ошибке —-1.Добавлено в версии 3.12.
-
int PyDict_Unwatch(int watcher_id, PyObject *dict) -
Снимает с dict отметку об отслеживании. Функция обратного вызова, назначенная идентификатору watcher_id функцией
PyDict_AddWatcher(), больше не будет вызываться при изменении или освобождении dict. Ранее этот наблюдатель должен был начать отслеживать словарь. При успешном выполнении возвращает0, при ошибке —-1.Добавлено в версии 3.12.
-
type PyDict_WatchEvent -
Перечисление возможных событий наблюдателя словаря:
PyDict_EVENT_ADDED,PyDict_EVENT_MODIFIED,PyDict_EVENT_DELETED,PyDict_EVENT_CLONED,PyDict_EVENT_CLEAREDилиPyDict_EVENT_DEALLOCATED.Добавлено в версии 3.12.
-
typedef int (*PyDict_WatchCallback)(PyDict_WatchEvent event, PyObject *dict, PyObject *key, PyObject *new_value) -
Тип функции обратного вызова наблюдателя словаря.
Если event имеет значение
PyDict_EVENT_CLEAREDилиPyDict_EVENT_DEALLOCATED, и key, и new_value будут равныNULL. Если event имеет значениеPyDict_EVENT_ADDEDилиPyDict_EVENT_MODIFIED, new_value будет новым значением для key. Если event имеет значениеPyDict_EVENT_DELETED, ключ key удаляется из словаря, а new_value будет равенNULL.Событие
PyDict_EVENT_CLONEDвозникает, когда dict ранее был пуст, а в него объединяется другой словарь. Для повышения эффективности этой операции в таком случае не генерируются событияPyDict_EVENT_ADDEDдля отдельных ключей; вместо этого генерируется одно событиеPyDict_EVENT_CLONED, а в качестве key передаётся исходный словарь.Функция обратного вызова может просматривать dict, но не должна его изменять: это может привести к непредсказуемым последствиям, в том числе к бесконечной рекурсии. Не запускайте выполнение кода Python в функции обратного вызова, поскольку такой код может изменить словарь как побочный эффект.
Если event имеет значение
PyDict_EVENT_DEALLOCATED, создание в функции обратного вызова новой ссылки на словарь, который собираются уничтожить, воскресит его и не позволит освободить в этот момент. Когда воскресший объект будет уничтожен позднее, будут вызваны все наблюдатели, активные в этот момент.Функции обратного вызова вызываются до внесения уведомляемого изменения в dict, поэтому можно просмотреть предыдущее состояние dict.
Если функция обратного вызова устанавливает исключение, она должна вернуть
-1; это исключение будет выведено как необрабатываемое с помощьюPyErr_WriteUnraisable(). В противном случае она должна вернуть0.При входе в функцию обратного вызова уже может быть установлено ожидающее исключение. В этом случае функция должна вернуть
0, оставив то же исключение установленным. Это означает, что функция обратного вызова не может вызывать другие API, способные установить исключение, если сначала не сохранит и не сбросит состояние исключения и не восстановит его перед возвратом.Добавлено в версии 3.12.
© 2001–2024 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.12/c-api/dict.html