Словари объектов
-
type PyDictObject -
Этот подтип
PyObjectпредставляет собой объект словаря Python.
-
PyTypeObject PyDict_Type -
Часть Стабильной ABI.
Этот экземпляр
PyTypeObjectпредставляет собой тип словаря Python. Это тот же объект, что иdictна уровне Python.
-
int PyDict_Check(PyObject *p) -
Возвращает true, если p является объектом словаря или экземпляром подтипа типа словаря. Эта функция всегда выполняется успешно.
-
int PyDict_CheckExact(PyObject *p) -
Возвращает true, если p является объектом словаря, но не экземпляром подтипа типа словаря. Эта функция всегда выполняется успешно.
-
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.
Вставляет val в словарь p, используя key в качестве ключа. key должен быть
const char*. Объект ключа создается с помощьюPyUnicode_FromString(key). Возвращает0при успехе или-1при неудаче. Эта функция не заимствует ссылку на val.
-
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.
Удаляет запись в словаре p, имеющую ключ, заданный строкой key. Если key отсутствует в словаре, возбуждается
KeyError. Возвращает0при успехе или-1при неудаче.
-
PyObject *PyDict_GetItem(PyObject *p, PyObject *key) -
Значение возврата: Заимствованная ссылка. Часть Стабильной ABI.
Возвращает объект из словаря p, имеющий ключ key. Возвращает
NULL, если ключ key отсутствует, но без установки исключения.Обратите внимание, что исключения, возникающие при вызове методов
__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 задается какconst char*, а не какPyObject*.Обратите внимание, что исключения, возникающие при вызове методов
__hash__()и__eq__()и создании временного строкового объекта, будут подавлены. Для получения отчета об ошибках используйтеPyDict_GetItemWithError()вместо этого.
-
PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj) -
Значение возврата: Заимствованная ссылка.
Это то же самое, что и
dict.setdefault()на уровне Python. Если присутствует, возвращает значение, соответствующее key в словаре 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.
Это то же самое, что
PyDict_Merge(a, b, 1)в C и аналогичноa.update(b)в Python, за исключением того, что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
© 2001–2023 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.10/c-api/dict.html