Объекты словаря

type PyDictObject

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

PyTypeObject PyDict_Type
Part of the Стабильный 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()
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает новый пустой словарь или NULL в случае сбоя.

PyObject *PyDictProxy_New(PyObject *mapping)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает объект types.MappingProxyType для отображения, которое обеспечивает поведение, доступное только для чтения. Обычно это используется для создания представления, предотвращающего изменение словаря для нединамических типов классов.

void PyDict_Clear(PyObject *p)
Part of the Стабильный ABI.

Очистите существующий словарь от всех пар ключ-значение.

int PyDict_Contains(PyObject *p, PyObject *key)
Part of the Стабильный ABI.

Определите, содержит ли словарь p ключ. Если элемент в p соответствует ключу, верните 1, в противном случае верните 0. В случае ошибки верните -1. Это эквивалентно выражению Python key in p.

PyObject *PyDict_Copy(PyObject *p)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает новый словарь, содержащий те же пары ключ-значение, что и p.

int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)
Part of the Стабильный ABI.

Вставьте val в словарь p с ключом key. ключ должен быть hashable; если это не так, то будет поднят TypeError. Возвращает 0 в случае успеха или -1 в случае неудачи. Эта функция не крадет ссылку на val.

int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)
Part of the Стабильный ABI.

Это то же самое, что и PyDict_SetItem(), но ключ указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

int PyDict_DelItem(PyObject *p, PyObject *key)
Part of the Стабильный ABI.

Удалите запись в словаре p с ключом key. ключ должен быть hashable; если это не так, то вводится значение TypeError. Если key отсутствует в словаре, вызывается KeyError. Возвращает 0 в случае успеха или -1 в случае неудачи.

int PyDict_DelItemString(PyObject *p, const char *key)
Part of the Стабильный ABI.

Это то же самое, что и PyDict_DelItem(), но ключ указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

PyObject *PyDict_GetItem(PyObject *p, PyObject *key)
Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.

Возвращает объект из словаря p, у которого есть ключ key. Возвращает NULL, если ключ key отсутствует, но без установки исключения.

Примечание

Исключения, возникающие при вызове методов __hash__() и __eq__(), автоматически игнорируются. Вместо этого предпочитайте функцию PyDict_GetItemWithError().

Изменено в версии 3.10: Вызов этого API без удержания GIL был разрешен по историческим причинам. Это больше не разрешено.

PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key)
Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.

Вариант PyDict_GetItem(), который не подавляет исключения. Возвращает NULL ** с** значением исключения, установленным, если произошло исключение. Возвращает NULL без исключения, установленного, если ключ отсутствовал.

PyObject *PyDict_GetItemString(PyObject *p, const char *key)
Возвращаемое значение: Заимствованная ссылка. Part of the Стабильный ABI.

Это то же самое, что и PyDict_GetItem(), но ключ указывается как строка const char* в кодировке UTF-8 байт, а не как PyObject*.

Примечание

Исключения, возникающие при вызове методов __hash__() и __eq__() или при создании временного объекта str, автоматически игнорируются. Предпочтите использовать функцию PyDict_GetItemWithError() с вашей собственной клавишей PyUnicode_FromString() * вместо этого.

PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)
Возвращаемое значение: Заимствованная ссылка.

Это то же самое, что и на уровне Python dict.setdefault(). Если присутствует, то возвращает значение, соответствующее key из словаря p. Если ключа нет в dict, он вставляется со значением defaultobj и возвращается значение defaultobj. Эта функция вычисляет хэш-функцию key только один раз, вместо того, чтобы вычислять ее независимо для поиска и вставки.

Добавлено в версии 3.4.

PyObject *PyDict_Items(PyObject *p)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает a PyListObject, содержащий все элементы из словаря.

PyObject *PyDict_Keys(PyObject *p)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает a PyListObject, содержащий все ключи из словаря.

PyObject *PyDict_Values(PyObject *p)
Возвращаемое значение: Новая ссылка. Part of the Стабильный ABI.

Возвращает a PyListObject, содержащий все значения из словаря p.

Py_ssize_t PyDict_Size(PyObject *p)
Part of the Стабильный ABI.

Возвращает количество элементов в словаре. Это эквивалентно len(p) в словаре.

int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)
Part of the Стабильный ABI.

Выполните итерацию по всем парам ключ-значение в словаре p. Параметр Py_ssize_t, на который ссылается ppos, должен быть инициализирован значением 0 перед первым вызовом этой функции, чтобы начать итерацию; функция возвращает значение true для каждой пары в словаре и значение false, как только будут указаны все пары. Параметры pkey и pvalue должны либо указывать на PyObject* переменные, которые будут заполняться каждым ключом и значением соответственно, либо могут быть NULL. Любые ссылки, возвращаемые с их помощью, являются заимствованными. ppo не должны изменяться во время итерации. Его значение представляет смещения во внутренней структуре словаря, а поскольку структура разрежена, смещения не являются последовательными.

Например:

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)
Part of the Стабильный ABI.

Выполните итерацию по отображению объекта b, добавляя пары ключ-значение в словарь a. b может быть словарем или любым объектом, поддерживающим PyMapping_Keys() и PyObject_GetItem(). Если значение override равно true, существующие пары в a будут заменены, если в b будет найден соответствующий ключ, в противном случае пары будут добавлены только в том случае, если в a нет соответствующего ключа. Верните 0 в случае успеха или -1, если было вызвано исключение.

int PyDict_Update(PyObject *a, PyObject *b)
Part of the Стабильный ABI.

Это то же самое, что PyDict_Merge(a, b, 1) в C, и аналогично a.update(b) в Python, за исключением того, что PyDict_Update() не возвращается к итерации по последовательности пар ключ-значение, если второй аргумент не содержит «атрибут «ключи». Верните 0 в случае успеха или -1, если было вызвано исключение.

int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)
Part of the Стабильный 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
Вернуться на верх