Объекты словаря¶
-
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
. Это эквивалентно выражению Pythonkey 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