Словари объектов
-
PyDictObject -
Этот подтип
PyObjectпредставляет собой объект словаря Python.
-
PyTypeObject PyDict_Type -
Эта instance of
PyTypeObjectпредставляет тип словаря Python. Это тот же объект, что иdictв слое Python.
-
int PyDict_Check(PyObject *p) -
Возвращает true, если p — это объект словаря или экземпляр подтипа типа словаря. Эта функция всегда выполняется успешно.
-
int PyDict_CheckExact(PyObject *p) -
Возвращает true, если p — это объект словаря, но не экземпляр подтипа типа словаря. Эта функция всегда выполняется успешно.
-
PyObject* PyDict_New() -
Значение возврата: Новая ссылка.
Возвращает новый пустой словарь или
NULLпри ошибке.
-
PyObject* PyDictProxy_New(PyObject *mapping) -
Значение возврата: Новая ссылка.
Возвращает объект
types.MappingProxyTypeдля отображения, который обеспечивает поведение только для чтения. Обычно используется для создания представления, чтобы предотвратить изменение словаря для типов классов, не зависящих от динамики.
-
void PyDict_Clear(PyObject *p) -
Очищает существующий словарь всех пар ключ-значение.
-
int PyDict_Contains(PyObject *p, PyObject *key) -
Определяет, содержит ли словарь p ключ key. Если элемент в p совпадает с key, возвращает
1, в противном случае возвращает0. При ошибке возвращает-1. Это эквивалентно выражению Pythonkey in p.
-
PyObject* PyDict_Copy(PyObject *p) -
Значение возврата: Новая ссылка.
Возвращает новый словарь, содержащий те же пары ключ-значение, что и p.
-
int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val) -
Вставляет val в словарь p с ключом key. key должен быть хешируемым; если нет, будет поднята ошибка
TypeError. Возвращает0при успехе или-1при ошибке. Данная функция не заимствует ссылку на val.
-
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val) -
Вставляет val в словарь p, используя key в качестве ключа. 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) -
Значение возврата: Заимствованная ссылка.
Возвращает объект из словаря p, у которого есть ключ key. Возвращает
NULL, если ключ key отсутствует, но без установки исключения.Обратите внимание, что исключения, которые возникают при вызове методов
__hash__()и__eq__(), будут подавлены. Чтобы получить отчет об ошибках, используйтеPyDict_GetItemWithError()вместо этого.
-
PyObject* PyDict_GetItemWithError(PyObject *p, PyObject *key) -
Значение возврата: Заимствованная ссылка.
Вариант
PyDict_GetItem(), который не подавляет исключения. ВозвращаетNULLс установленным исключением, если произошла ошибка. ВозвращаетNULLбез установленного исключения, если ключ отсутствовал.
-
PyObject* PyDict_GetItemString(PyObject *p, const char *key) -
Значение возврата: Заимствованная ссылка.
Это то же самое, что и
PyDict_GetItem(), но key указан какconst char*, а не какPyObject*.Обратите внимание, что исключения, которые возникают при вызове методов
__hash__()и__eq__(), и создании временного строкового объекта, будут подавлены. Чтобы получить отчет об ошибках, используйтеPyDict_GetItemWithError()вместо этого.
-
PyObject* PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj) -
Значение возврата: Заимствованная ссылка.
Это аналогично Python-уровню
dict.setdefault(). Если ключ присутствует, возвращает значение, соответствующее key из словаря p. Если ключ отсутствует в словаре, он вставляется со значением defaultobj, и возвращается defaultobj. Эта функция вычисляет функцию хеширования key только один раз вместо независимого вычисления для поиска и вставки.Новое в версии 3.4.
-
PyObject* PyDict_Items(PyObject *p) -
Значение возврата: Новая ссылка.
Возвращает
PyListObject, содержащий все элементы из словаря.
-
PyObject* PyDict_Keys(PyObject *p) -
Значение возврата: Новая ссылка.
Возвращает
PyListObject, содержащий все ключи из словаря.
-
PyObject* PyDict_Values(PyObject *p) -
Значение возврата: Новая ссылка.
Возвращает
PyListObject, содержащий все значения из словаря p.
-
Py_ssize_t PyDict_Size(PyObject *p) -
Возвращает количество элементов в словаре. Это эквивалентно
len(p)в словаре.
-
int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) -
Итерируется по всем парам ключ-значение в словаре 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) -
Итерируется по объекту отображения b, добавляя пары ключ-значение в словарь a. b может быть словарем или любым объектом, поддерживающим
PyMapping_Keys()иPyObject_GetItem(). Если override имеет значение true, существующие пары в a будут заменены, если будет найден совпадающий ключ в b, в противном случае пары будут добавлены только в том случае, если в a не будет совпадающего ключа. Возвращает0при успехе или-1, если было вызвано исключение.
-
int PyDict_Update(PyObject *a, PyObject *b) -
Это то же самое, что и
PyDict_Merge(a, b, 1)в C, и аналогичноa.update(b)в Python, за исключением того, чтоPyDict_Update()не использует итерацию по последовательности пар ключ-значение, если у второго аргумента нет атрибута «ключи». Возвращает0при успехе или-1, если было вызвано исключение.
-
int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override) -
Обновить или объединить словарь 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
© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.9/c-api/dict.html