Spec-Zone.ru › Python 3.8

Словари объектов

PyDictObject

Этот подтип PyObject представляет собой объект словаря Python.

PyTypeObject PyDict_Type

Этот экземпляр 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. Это эквивалентно выражению Python key 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() не возвращается к итерации по последовательности пар ключ-значение, если у второго аргумента нет атрибута «keys». Возвращает 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
int PyDict_ClearFreeList()

Очистить список освобождённых объектов. Возвращает общее количество освобождённых элементов.

Новое в версии 3.3.

© 2001–2022 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.8/c-api/dict.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API