Словарные объекты¶
-
PyTypeObject
PyDict_Type
¶ - Part of the Stable 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
()¶ - Return value: New reference. Part of the Stable ABI.
Возвращает новый пустой словарь, или
NULL
при неудаче.
-
PyObject *
PyDictProxy_New
(PyObject *mapping)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает объект
types.MappingProxyType
для отображения, которое обеспечивает поведение только для чтения. Обычно это используется для создания представления, чтобы предотвратить модификацию словаря для нединамических типов классов.
-
void
PyDict_Clear
(PyObject *p)¶ - Part of the Stable ABI.
Очистить существующий словарь от всех пар ключ-значение.
-
int
PyDict_Contains
(PyObject *p, PyObject *key)¶ - Part of the Stable ABI.
Определите, содержит ли словарь p ключ. Если элемент в p соответствует ключу, возвращается
1
, иначе возвращается0
. При ошибке возвращается-1
. Это эквивалентно выражению Pythonkey in p
.
-
PyObject *
PyDict_Copy
(PyObject *p)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает новый словарь, содержащий те же пары ключ-значение, что и p.
-
int
PyDict_SetItem
(PyObject *p, PyObject *key, PyObject *val)¶ - Part of the Stable ABI.
Вставить val в словарь p с ключом key. Ключ key должен быть hashable; если это не так, будет выдано сообщение
TypeError
. Возвращается0
при успехе или-1
при неудаче. Эта функция не крадет ссылку на val.
-
int
PyDict_SetItemString
(PyObject *p, const char *key, PyObject *val)¶ - Part of the Stable ABI.
Вставьте val в словарь p, используя key в качестве ключа. Ключ должен быть объектом const char*. Объект ключа создается с помощью
PyUnicode_FromString(key)
. Возвращается0
при успехе или-1
при неудаче. Эта функция не крадет ссылку на val.
-
int
PyDict_DelItem
(PyObject *p, PyObject *key)¶ - Part of the Stable ABI.
Удалить запись в словаре p с ключом key. Ключ key должен быть хэшируемым; если это не так, выдается сообщение
TypeError
. Если key отсутствует в словаре, выдается сообщениеKeyError
. Возвращается0
при успехе или-1
при неудаче.
-
int
PyDict_DelItemString
(PyObject *p, const char *key)¶ - Part of the Stable ABI.
Удалить запись в словаре p, которая имеет ключ, заданный строкой key. Если key отсутствует в словаре, выдается сообщение
KeyError
. Возвращается0
при успехе или-1
при неудаче.
-
PyObject *
PyDict_GetItem
(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Возвращает объект из словаря p, который имеет ключ key. Вернуть
NULL
, если ключ key отсутствует, но без установки исключения.Обратите внимание, что исключения, возникающие при вызове методов
__hash__()
и__eq__()
, будут подавлены. Для получения сообщений об ошибках используйтеPyDict_GetItemWithError()
вместо этого.Изменено в версии 3.10: Вызов этого API без удержания GIL был разрешен по историческим причинам. Теперь это больше не разрешено.
-
PyObject *
PyDict_GetItemWithError
(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Вариант
PyDict_GetItem()
, который не подавляет исключения. ВозвращаетNULL
с установленным исключением, если произошло исключение. ВозвращаетNULL
без установленного исключения, если ключ не присутствует.
-
PyObject *
PyDict_GetItemString
(PyObject *p, const char *key)¶ - Return value: Borrowed reference. Part of the Stable ABI.
Это то же самое, что и
PyDict_GetItem()
, но ключ указывается как const char*, а не как PyObject*.Обратите внимание, что исключения, возникающие при вызове методов
__hash__()
и__eq__()
и создании временного строкового объекта, будут подавлены. Для получения сообщений об ошибках используйтеPyDict_GetItemWithError()
вместо этого.
-
PyObject *
PyDict_SetDefault
(PyObject *p, PyObject *key, PyObject *defaultobj)¶ - Return value: Borrowed reference.
Это то же самое, что и
dict.setdefault()
на уровне Python. Если присутствует, то возвращается значение, соответствующее key из словаря p. Если ключа нет в dict, он вставляется со значением defaultobj и возвращается defaultobj. Эта функция оценивает хэш-функцию key только один раз, вместо того, чтобы оценивать ее независимо для поиска и вставки.Добавлено в версии 3.4.
-
PyObject *
PyDict_Items
(PyObject *p)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает
PyListObject
, содержащий все элементы из словаря.
-
PyObject *
PyDict_Keys
(PyObject *p)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает
PyListObject
, содержащий все ключи из словаря.
-
PyObject *
PyDict_Values
(PyObject *p)¶ - Return value: New reference. Part of the Stable ABI.
Возвращает
PyListObject
, содержащий все значения из словаря p.
-
Py_ssize_t
PyDict_Size
(PyObject *p)¶ - Part of the Stable ABI.
Возвращает количество элементов в словаре. Это эквивалентно
len(p)
в словаре.
-
int
PyDict_Next
(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)¶ - Part of the Stable 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)¶ - Part of the Stable 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 Stable 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)¶ - Part of the Stable ABI.
Обновление или объединение в словарь 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