Документация Python неофициальный перевод

dict.md

654 строк · 59.1 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.15/c-api/dict.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# Словари89#### `type PyDictObject`1011Этот подтип [`PyObject`](https://python-all.ru/3.15/c-api/structures.html#c.PyObject) представляет объект словаря Python.1213#### `PyTypeObject PyDict_Type`1415*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*1617Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.15/c-api/type.html#c.PyTypeObject) представляет тип словаря Python. Это тот же объект, что и [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) на уровне Python.1819#### `int PyDict_Check(PyObject *p)`2021*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*2223Возвращает True, если *p* – объект dict или экземпляр подтипа типа dict. Эта функция всегда завершается успешно.2425#### `int PyDict_CheckExact(PyObject *p)`2627*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*2829Возвращает True, если *p* – объект dict, но не экземпляр подтипа типа dict. Эта функция всегда завершается успешно.3031#### `PyObject *PyDict_New()`3233*Возвращаемое значение: новая ссылка.*3435*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*3637*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*3839Возвращает новый пустой словарь или `NULL` в случае ошибки.4041#### `PyObject *PyDictProxy_New(PyObject *mapping)`4243*Возвращаемое значение: новая ссылка.*4445*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*4647Возвращает объект [`types.MappingProxyType`](https://python-all.ru/3.15/library/types.html#types.MappingProxyType) для отображения, которое принудительно обеспечивает режим только для чтения. Обычно используется для создания представления, предотвращающего изменение словаря для нединамических типов классов.4849Первый аргумент может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict), [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict) или отображением.5051Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).5253#### `PyTypeObject PyDictProxy_Type`5455*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*5657Объект типа для прокси-объектов отображения, создаваемых [`PyDictProxy_New()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDictProxy_New), и для атрибута `__dict__` только для чтения многих встроенных типов. Экземпляр [`PyDictProxy_Type`](https://python-all.ru/3.15/c-api/dict.html#c.PyDictProxy_Type) предоставляет динамическое представление только для чтения базового словаря: изменения в базовом словаре отражаются в прокси, но сам прокси не поддерживает операции изменения. Это соответствует [`types.MappingProxyType`](https://python-all.ru/3.15/library/types.html#types.MappingProxyType) в Python.5859#### `void PyDict_Clear(PyObject *p)`6061*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*6263*Потокобезопасность: [Атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*6465Очищает существующий словарь от всех пар ключ-значение.6667Ничего не делает, если аргумент не является [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или подклассом `dict`.6869#### `int PyDict_Contains(PyObject *p, PyObject *key)`7071*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*7273*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*7475Определяет, содержит ли словарь *p* ключ *key*. Если элемент в *p* соответствует *key*, возвращает `1`, в противном случае возвращает `0`. В случае ошибки возвращает `-1`. Это эквивалентно выражению Python `key in p`.7677Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).7879> **Примечание**80>81> Операция является атомарной в [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) когда *key* является [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), [`int`](https://python-all.ru/3.15/library/functions.html#int), [`float`](https://python-all.ru/3.15/library/functions.html#float), [`bool`](https://python-all.ru/3.15/library/functions.html#bool) или [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes).8283Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).8485#### `int PyDict_ContainsString(PyObject *p, const char *key)`8687*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*8889Это то же самое, что и [`PyDict_Contains()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Contains), но *key* задается как const char\* строка байтов в кодировке UTF-8, а не [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*.9091Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).9293Добавлено в версии 3.13.9495Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).9697#### `PyObject *PyDict_Copy(PyObject *p)`9899*Возвращаемое значение: новая ссылка.*100101*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*102103*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*104105Возвращает новый словарь, содержащий те же пары ключ-значение, что и *p*.106107#### `int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)`108109*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*110111*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*112113Вставляет *val* в словарь *p* с ключом *key*. *key* должен быть [хэшируемым](https://python-all.ru/3.15/glossary.html#term-hashable); если нет, будет возбуждено [`TypeError`](https://python-all.ru/3.15/library/exceptions.html#TypeError). Возвращает `0` при успехе или `-1` при неудаче. Эта функция *не* «[похищает](https://python-all.ru/3.15/glossary.html#term-steal)» ссылку на *val*.114115> **Примечание**116>117> Операция является атомарной в [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) когда *key* является [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), [`int`](https://python-all.ru/3.15/library/functions.html#int), [`float`](https://python-all.ru/3.15/library/functions.html#float), [`bool`](https://python-all.ru/3.15/library/functions.html#bool) или [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes).118119#### `int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)`120121*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*122123*Потокобезопасность: [Атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*124125То же, что и [`PyDict_SetItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_SetItem), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*.126127#### `int PyDict_DelItem(PyObject *p, PyObject *key)`128129*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*130131*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*132133Удаляет запись из словаря *p* с ключом *key*. *key* должен быть [хэшируемым](https://python-all.ru/3.15/glossary.html#term-hashable); если нет, возбуждается [`TypeError`](https://python-all.ru/3.15/library/exceptions.html#TypeError). Если *key* отсутствует в словаре, возбуждается [`KeyError`](https://python-all.ru/3.15/library/exceptions.html#KeyError). Возвращает `0` при успехе или `-1` при неудаче.134135> **Примечание**136>137> Операция является атомарной в [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) когда *key* является [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), [`int`](https://python-all.ru/3.15/library/functions.html#int), [`float`](https://python-all.ru/3.15/library/functions.html#float), [`bool`](https://python-all.ru/3.15/library/functions.html#bool) или [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes).138139#### `int PyDict_DelItemString(PyObject *p, const char *key)`140141*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*142143*Потокобезопасность: [Атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*144145То же, что и [`PyDict_DelItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_DelItem), но *key* задаётся как const char\* строка байтов в кодировке UTF-8, а не как [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*.146147#### `int PyDict_GetItemRef(PyObject *p, PyObject *key, PyObject **result)`148149*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.13.*150151*Потокобезопасность: [Безопасно для параллельного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*152153Возвращает новую [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference) на объект из словаря *p*, имеющий ключ *key*:154155- Если ключ присутствует, устанавливает *\*result* в новую [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference) на значение и возвращает `1`.156- Если ключ отсутствует, устанавливает *\*result* в `NULL` и возвращает `0`.157- При ошибке возбуждает исключение, устанавливает *\*result* в `NULL` и возвращает `-1`.158159Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).160161> **Примечание**162>163> Операция является атомарной в [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) когда *key* является [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), [`int`](https://python-all.ru/3.15/library/functions.html#int), [`float`](https://python-all.ru/3.15/library/functions.html#float), [`bool`](https://python-all.ru/3.15/library/functions.html#bool) или [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes).164165Добавлено в версии 3.13.166167Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).168169См. также функцию [`PyObject_GetItem()`](https://python-all.ru/3.15/c-api/object.html#c.PyObject_GetItem).170171#### `PyObject *PyDict_GetItem(PyObject *p, PyObject *key)`172173*Возвращаемое значение: заимствованная ссылка.*174175*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*176177*Потокобезопасность: [Безопасно вызывать из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*178179Возвращает [заимствованную ссылку](https://python-all.ru/3.15/glossary.html#term-borrowed-reference) на объект из словаря *p*, который имеет ключ *key*. Возвращает `NULL`, если ключ *key* отсутствует *без* возбуждения исключения.180181Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).182183> **Примечание**184>185> Исключения, возникающие при вызове методов [`__hash__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__hash__) и [`__eq__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__eq__), молча игнорируются. Вместо этого рекомендуется использовать функцию [`PyDict_GetItemWithError()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemWithError).186187> **Примечание**188>189> В [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) возвращаемая [заимствованная ссылка](https://python-all.ru/3.15/glossary.html#term-borrowed-reference) может стать недействительной, если другой поток одновременно изменяет словарь. Предпочтительнее использовать [`PyDict_GetItemRef()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemRef), которая возвращает [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference).190191Изменено в версии 3.10: Вызов этого API без [прикреплённого состояния потока](https://python-all.ru/3.15/glossary.html#term-attached-thread-state) ранее допускался по историческим причинам. Теперь это запрещено.192193Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).194195#### `PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key)`196197*Возвращаемое значение: заимствованная ссылка.*198199*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*200201*Потокобезопасность: [Безопасно вызывать из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*202203Вариант [`PyDict_GetItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItem), который не подавляет исключения. Возвращает `NULL` **с** установленным исключением, если произошло исключение. Возвращает `NULL` **без** установленного исключения, если ключ отсутствовал.204205> **Примечание**206>207> В [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) возвращаемая [заимствованная ссылка](https://python-all.ru/3.15/glossary.html#term-borrowed-reference) может стать недействительной, если другой поток одновременно изменяет словарь. Предпочтительнее использовать [`PyDict_GetItemRef()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemRef), которая возвращает [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference).208209Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).210211#### `PyObject *PyDict_GetItemString(PyObject *p, const char *key)`212213*Возвращаемое значение: заимствованная ссылка.*214215*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*216217*Потокобезопасность: [Безопасно вызывать из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*218219Это то же самое, что и [`PyDict_GetItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItem), но *key* задается как const char\* строка байтов в кодировке UTF-8, а не [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*.220221> **Примечание**222>223> Исключения, возникающие при вызове методов [`__hash__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__hash__) и [`__eq__()`](https://python-all.ru/3.15/reference/datamodel.html#object.__eq__) или при создании временного объекта [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), молча игнорируются. Вместо этого рекомендуется использовать функцию [`PyDict_GetItemWithError()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemWithError) с собственным [`PyUnicode_FromString()`](https://python-all.ru/3.15/c-api/unicode.html#c.PyUnicode_FromString) *key*.224225> **Примечание**226>227> В [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) возвращаемая [заимствованная ссылка](https://python-all.ru/3.15/glossary.html#term-borrowed-reference) может стать недействительной, если другой поток одновременно изменяет словарь. Предпочтительнее использовать [`PyDict_GetItemStringRef()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemStringRef), которая возвращает [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference).228229Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).230231#### `int PyDict_GetItemStringRef(PyObject *p, const char *key, PyObject **result)`232233*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.13.*234235*Потокобезопасность: [Атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*236237Аналогично [`PyDict_GetItemRef()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemRef), но *key* задается как const char\* строка байтов в кодировке UTF-8, а не [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*.238239Добавлено в версии 3.13.240241Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).242243#### `PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)`244245*Возвращаемое значение: заимствованная ссылка.*246247*Потокобезопасность: [Безопасно вызывать из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*248249Это то же самое, что и функция [`dict.setdefault()`](https://python-all.ru/3.15/library/stdtypes.html#dict.setdefault) на уровне Python. Если значение присутствует, она возвращает значение, соответствующее *key*, из словаря *p*. Если ключ отсутствует в словаре, он вставляется со значением *defaultobj* и возвращается *defaultobj*. Эта функция вычисляет хеш-функцию для *key* только один раз, вместо того чтобы вычислять её отдельно для поиска и вставки.250251Добавлено в версии 3.4.252253> **Примечание**254>255> В [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) возвращаемая [заимствованная ссылка](https://python-all.ru/3.15/glossary.html#term-borrowed-reference) может стать недействительной, если другой поток одновременно изменяет словарь. Предпочтительнее использовать [`PyDict_SetDefaultRef()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_SetDefaultRef), которая возвращает [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference).256257#### `int PyDict_SetDefaultRef(PyObject *p, PyObject *key, PyObject *default_value, PyObject **result)`258259*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable) начиная с версии 3.15.*260261*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*262263Вставляет *default\_value* в словарь *p* с ключом *key*, если ключ ещё отсутствует в словаре. Если *result* не равен `NULL`, то *\*result* устанавливается в [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference) либо на *default\_value* (если ключ отсутствовал), либо на существующее значение (если *key* уже присутствовал в словаре). Возвращает `1`, если ключ присутствовал и *default\_value* не был вставлен, или `0`, если ключ отсутствовал и *default\_value* был вставлен. При ошибке возвращает `-1`, устанавливает исключение и устанавливает `*result` в `NULL`.264265Для ясности: если у вас есть сильная ссылка на *default\_value* до вызова этой функции, то после её возврата у вас будет сильная ссылка как на *default\_value*, так и на *\*result* (если он не равен `NULL`). Они могут ссылаться на один и тот же объект: в этом случае у вас будет две отдельные ссылки на него.266267> **Примечание**268>269> Операция является атомарной в [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) когда *key* является [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), [`int`](https://python-all.ru/3.15/library/functions.html#int), [`float`](https://python-all.ru/3.15/library/functions.html#float), [`bool`](https://python-all.ru/3.15/library/functions.html#bool) или [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes).270271Добавлено в версии 3.13.272273#### `int PyDict_Pop(PyObject *p, PyObject *key, PyObject **result)`274275*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*276277Удаляет *key* из словаря *p* и при необходимости возвращает удалённое значение. Не вызывает [`KeyError`](https://python-all.ru/3.15/library/exceptions.html#KeyError), если ключ отсутствует.278279- Если ключ присутствует, устанавливает *\*result* в новую ссылку на удалённое значение, если *result* не равен `NULL`, и возвращает `1`.280- Если ключ отсутствует, устанавливает *\*result* в `NULL`, если *result* не равен `NULL`, и возвращает `0`.281- При ошибке вызывает исключение и возвращает `-1`.282283Аналогично [`dict.pop()`](https://python-all.ru/3.15/library/stdtypes.html#dict.pop), но без значения по умолчанию и не вызывает [`KeyError`](https://python-all.ru/3.15/library/exceptions.html#KeyError), если ключ отсутствует.284285> **Примечание**286>287> Операция является атомарной в [сборке со свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threaded-build) когда *key* является [`str`](https://python-all.ru/3.15/library/stdtypes.html#str), [`int`](https://python-all.ru/3.15/library/functions.html#int), [`float`](https://python-all.ru/3.15/library/functions.html#float), [`bool`](https://python-all.ru/3.15/library/functions.html#bool) или [`bytes`](https://python-all.ru/3.15/library/stdtypes.html#bytes).288289Добавлено в версии 3.13.290291#### `int PyDict_PopString(PyObject *p, const char *key, PyObject **result)`292293*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*294295Аналогично [`PyDict_Pop()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Pop), но *key* задается как const char\* строка байтов в кодировке UTF-8, а не [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*.296297Добавлено в версии 3.13.298299#### `PyObject *PyDict_Items(PyObject *p)`300301*Возвращаемое значение: новая ссылка.*302303*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*304305*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*306307Возвращает [`PyListObject`](https://python-all.ru/3.15/c-api/list.html#c.PyListObject), содержащий все элементы из словаря.308309Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).310311Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).312313#### `PyObject *PyDict_Keys(PyObject *p)`314315*Возвращаемое значение: новая ссылка.*316317*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*318319*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*320321Возвращает [`PyListObject`](https://python-all.ru/3.15/c-api/list.html#c.PyListObject), содержащий все ключи из словаря.322323Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).324325Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).326327#### `PyObject *PyDict_Values(PyObject *p)`328329*Возвращаемое значение: новая ссылка.*330331*Часть [стабильного ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*332333*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*334335Возвращает [`PyListObject`](https://python-all.ru/3.15/c-api/list.html#c.PyListObject), содержащий все значения из словаря *p*.336337Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).338339Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).340341#### `Py_ssize_t PyDict_Size(PyObject *p)`342343*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*344345*Потокобезопасность: [Атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*346347Возвращает количество элементов в словаре. Это эквивалентно вызову `len(p)` для словаря.348349Аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).350351Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).352353#### `Py_ssize_t PyDict_GET_SIZE(PyObject *p)`354355*Потокобезопасность: [атомарно](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-atomic).*356357Аналогично [`PyDict_Size()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Size), но без проверки ошибок.358359Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).360361#### `int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)`362363*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*364365*Потокобезопасность: [Безопасен для вызова из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*366367Перебирает все пары ключ-значение в словаре *p*. Значение [`Py_ssize_t`](https://python-all.ru/3.15/c-api/intro.html#c.Py_ssize_t), на которое указывает *ppos*, должно быть инициализировано `0` перед первым вызовом этой функции для начала итерации; функция возвращает true для каждой пары в словаре и false, когда все пары сообщены. Параметры *pkey* и *pvalue* должны либо указывать на переменные типа [PyObject](https://python-all.ru/3.15/c-api/structures.html#c.PyObject)\*, которые будут заполнены соответствующими ключом и значением, либо могут быть `NULL`. Все ссылки, возвращаемые через них, являются заимствованными. *ppos* не должен изменяться во время итерации. Его значение представляет смещения внутри внутренней структуры словаря, и поскольку структура разреженная, смещения не являются последовательными.368369Первым аргументом может быть [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).370371Например:372373```c374PyObject *key, *value;375Py_ssize_t pos = 0;376377while (PyDict_Next(self->dict, &pos, &key, &value)) {378    /* сделайте что-нибудь интересное со значениями... */379    ...380}381```382383Словарь *p* не должен изменяться во время итерации. Можно безопасно изменять значения ключей при переборе словаря, но только до тех пор, пока набор ключей не меняется. Например:384385```c386PyObject *key, *value;387Py_ssize_t pos = 0;388389while (PyDict_Next(self->dict, &pos, &key, &value)) {390    long i = PyLong_AsLong(value);391    if (i == -1 && PyErr_Occurred()) {392        return -1;393    }394    PyObject *o = PyLong_FromLong(i + 1);395    if (o == NULL)396        return -1;397    if (PyDict_SetItem(self->dict, key, o) < 0) {398        Py_DECREF(o);399        return -1;400    }401    Py_DECREF(o);402}403```404405Функция не является потокобезопасной в сборке [со свободными потоками](https://python-all.ru/3.15/glossary.html#term-free-threading) без внешней синхронизации для изменяемого [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict). Можно использовать [`Py_BEGIN_CRITICAL_SECTION`](https://python-all.ru/3.15/c-api/synchronization.html#c.Py_BEGIN_CRITICAL_SECTION) для блокировки словаря во время итерации по нему:406407```c408Py_BEGIN_CRITICAL_SECTION(self->dict);409while (PyDict_Next(self->dict, &pos, &key, &value)) {410    ...411}412Py_END_CRITICAL_SECTION();413```414415Функция потокобезопасна для [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).416417> **Примечание**418>419> В сборке со свободными потоками эту функцию можно безопасно использовать внутри критической секции. Однако ссылки, возвращаемые для *pkey* и *pvalue*, являются [заимствованными](https://python-all.ru/3.15/glossary.html#term-borrowed-reference) и действительны только пока удерживается критическая секция. Если вам нужно использовать эти объекты вне критической секции или когда критическая секция может быть приостановлена, создайте [сильную ссылку](https://python-all.ru/3.15/glossary.html#term-strong-reference) (например, с помощью [`Py_NewRef()`](https://python-all.ru/3.15/c-api/refcounting.html#c.Py_NewRef)).420421Изменено в версии 3.15: также принимает [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict).422423#### `int PyDict_Merge(PyObject *a, PyObject *b, int override)`424425*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*426427*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*428429Перебирает объект отображения *b*, добавляя пары ключ-значение в словарь *a*. *b* может быть словарем или любым объектом, поддерживающим [`PyMapping_Keys()`](https://python-all.ru/3.15/c-api/mapping.html#c.PyMapping_Keys) и [`PyObject_GetItem()`](https://python-all.ru/3.15/c-api/object.html#c.PyObject_GetItem). Если *override* равно true, существующие пары в *a* будут заменены, если найден совпадающий ключ в *b*; в противном случае пары будут добавлены только если нет совпадающего ключа в *a*. Возвращает `0` при успехе или `-1`, если было возбуждено исключение.430431> **Примечание**432>433> В сборке [со свободными потоками](https://python-all.ru/3.15/glossary.html#term-free-threaded-build), когда *b* является [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) (со стандартным итератором), оба *a* и *b* блокируются на время выполнения операции. Когда *b* является не словарным отображением, блокируется только *a*; *b* может быть одновременно изменен другим потоком.434435#### `int PyDict_Update(PyObject *a, PyObject *b)`436437*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*438439*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*440441То же самое, что и `PyDict_Merge(a, b, 1)` в C, и похоже на `a.update(b)` в Python, за исключением того, что [`PyDict_Update()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Update) не переходит к итерации по последовательности пар ключ-значение, если у второго аргумента нет атрибута “keys”. Возвращает `0` при успехе или `-1`, если было возбуждено исключение.442443> **Примечание**444>445> В сборке [со свободными потоками](https://python-all.ru/3.15/glossary.html#term-free-threaded-build), когда *b* является [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) (со стандартным итератором), оба *a* и *b* блокируются на время выполнения операции. Когда *b* является не словарным отображением, блокируется только *a*; *b* может быть одновременно изменен другим потоком.446447#### `int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)`448449*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*450451*Потокобезопасность: [Безопасно для одновременного использования на одном объекте](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-shared).*452453Обновляет или объединяет словарь *a*, используя пары ключ-значение из *seq2*. *seq2* должен быть итерируемым объектом, который возвращает итерируемые объекты длины 2, рассматриваемые как пары ключ-значение. При повторяющихся ключах последнее значение побеждает, если *override* истинно, иначе первое. Возвращает `0` при успехе или `-1`, если возникло исключение. Эквивалент на Python (за исключением возвращаемого значения):454455```c456def PyDict_MergeFromSeq2(a, seq2, override):457    for key, value in seq2:458        if override or key not in a:459            a[key] = value460```461462> **Примечание**463>464> В сборке с [свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threading) блокируется только *a*. Итерация по *seq2* не синхронизирована; *seq2* может быть одновременно изменён другим потоком.465466#### `int PyDict_AddWatcher(PyDict_WatchCallback callback)`467468*Потокобезопасность: [Безопасно вызывать из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*469470Регистрирует *колбэк* в качестве наблюдателя словаря. Возвращает неотрицательное целое id, которое должно передаваться в последующие вызовы [`PyDict_Watch()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Watch). В случае ошибки (например, закончились идентификаторы наблюдателей) возвращает `-1` и устанавливает исключение.471472> **Примечание**473>474> Эта функция не синхронизирована внутренне. В сборке с [свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threading) вызывающая сторона должна гарантировать, что нет параллельных вызовов [`PyDict_AddWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_AddWatcher) или [`PyDict_ClearWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_ClearWatcher).475476Добавлено в версии 3.12.477478#### `int PyDict_ClearWatcher(int watcher_id)`479480*Потокобезопасность: [Безопасно вызывать из нескольких потоков только с внешней синхронизацией](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-compatible).*481482Удаляет наблюдателя, идентифицированного *watcher\_id*, ранее возвращённого из [`PyDict_AddWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_AddWatcher). Возвращает `0` при успехе, `-1` при ошибке (например, если указанный *watcher\_id* никогда не был зарегистрирован).483484> **Примечание**485>486> Эта функция не синхронизирована внутренне. В сборке с [свободной многопоточностью](https://python-all.ru/3.15/glossary.html#term-free-threading) вызывающая сторона должна гарантировать, что нет параллельных вызовов [`PyDict_AddWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_AddWatcher) или [`PyDict_ClearWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_ClearWatcher).487488Добавлено в версии 3.12.489490#### `int PyDict_Watch(int watcher_id, PyObject *dict)`491492*Потокобезопасность: [Можно безопасно вызывать без внешней синхронизации для разных объектов](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-distinct).*493494Помечает словарь *dict* как наблюдаемый. Колбэк, которому *watcher\_id* был назначен [`PyDict_AddWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_AddWatcher), будет вызываться при изменении или освобождении *dict*. Возвращает `0` при успехе или `-1` при ошибке.495496Добавлено в версии 3.12.497498#### `int PyDict_Unwatch(int watcher_id, PyObject *dict)`499500*Потокобезопасность: [Можно безопасно вызывать без внешней синхронизации для разных объектов](https://python-all.ru/3.15/library/threadsafety.html#threadsafety-level-distinct).*501502Помечает словарь *dict* как больше не наблюдаемый. Колбэк, которому *watcher\_id* был назначен [`PyDict_AddWatcher()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_AddWatcher), больше не будет вызываться при изменении или освобождении *dict*. Словарь ранее должен был быть наблюдаемым этим наблюдателем. Возвращает `0` при успехе или `-1` при ошибке.503504Добавлено в версии 3.12.505506#### `type PyDict_WatchEvent`507508Перечисление возможных событий наблюдателя словаря: `PyDict_EVENT_ADDED`, `PyDict_EVENT_MODIFIED`, `PyDict_EVENT_DELETED`, `PyDict_EVENT_CLONED`, `PyDict_EVENT_CLEARED`, или `PyDict_EVENT_DEALLOCATED`.509510Добавлено в версии 3.12.511512#### `typedef int (*PyDict_WatchCallback)(PyDict_WatchEvent event, PyObject *dict, PyObject *key, PyObject *new_value)`513514Тип функции колбэка наблюдателя словаря.515516Если *event* равен `PyDict_EVENT_CLEARED` или `PyDict_EVENT_DEALLOCATED`, то и *key*, и *new\_value* будут равны `NULL`. Если *event* равен `PyDict_EVENT_ADDED` или `PyDict_EVENT_MODIFIED`, *new\_value* будет новым значением для *key*. Если *event* равен `PyDict_EVENT_DELETED`, *key* удаляется из словаря, и *new\_value* будет равен `NULL`.517518`PyDict_EVENT_CLONED` происходит, когда *dict* ранее был пуст, и в него объединяется другой словарь. Для сохранения эффективности этой операции события `PyDict_EVENT_ADDED` для каждого ключа в этом случае не выдаются; вместо этого выдаётся одно `PyDict_EVENT_CLONED`, и *key* будет исходным словарём.519520Колбэк может проверять, но не должен изменять *dict*; это может привести к непредсказуемым последствиям, включая бесконечную рекурсию. Не запускайте выполнение кода Python в колбэке, так как это может изменить словарь в качестве побочного эффекта.521522Если *event* равен `PyDict_EVENT_DEALLOCATED`, получение новой ссылки в колбэке на словарь, который будет уничтожен, воскресит его и предотвратит его освобождение в этот момент. Когда воскрешённый объект будет уничтожен позже, все активные на тот момент колбэки наблюдателей будут вызваны снова.523524Колбэки происходят до того, как происходит уведомляемое изменение *dict*, поэтому можно проверить предыдущее состояние *dict*.525526Если обратный вызов устанавливает исключение, он должен вернуть `-1`; это исключение будет выведено как неподнимаемое исключение с помощью [`PyErr_WriteUnraisable()`](https://python-all.ru/3.15/c-api/exceptions.html#c.PyErr_WriteUnraisable). В противном случае он должен вернуть `0`.527528На момент входа в обратный вызов уже может быть установлено отложенное исключение. В этом случае обратный вызов должен вернуть `0`, оставив то же исключение установленным. Это означает, что обратный вызов не может вызывать никакой другой API, который может установить исключение, если только он сначала не сохранит и не очистит состояние исключения, а затем не восстановит его перед возвратом.529530Добавлено в версии 3.12.531532## Объекты представления словаря533534#### `int PyDictViewSet_Check(PyObject *op)`535536Возвращает истину, если *op* является представлением множества внутри словаря. В настоящее время это эквивалентно [PyDictKeys\_Check](https://python-all.ru/3.15/c-api/dict.html#c.PyDictKeys_Check)([op](https://python-all.ru/3.15/c-api/dict.html#c.PyDictViewSet_Check)) || [PyDictItems\_Check](https://python-all.ru/3.15/c-api/dict.html#c.PyDictItems_Check)(op). Эта функция всегда выполняется успешно.537538#### `PyTypeObject PyDictKeys_Type`539540*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*541542Объект типа для представления ключей словаря. В Python это тип объекта, возвращаемого [`dict.keys()`](https://python-all.ru/3.15/library/stdtypes.html#dict.keys).543544#### `int PyDictKeys_Check(PyObject *op)`545546Возвращает истину, если *op* является экземпляром представления ключей словаря. Эта функция всегда выполняется успешно.547548#### `PyTypeObject PyDictValues_Type`549550*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*551552Объект типа для представления значений словаря. В Python это тип объекта, возвращаемого [`dict.values()`](https://python-all.ru/3.15/library/stdtypes.html#dict.values).553554#### `int PyDictValues_Check(PyObject *op)`555556Возвращает true, если *op* является экземпляром представления значений словаря. Эта функция всегда завершается успешно.557558#### `PyTypeObject PyDictItems_Type`559560*Часть [Stable ABI](https://python-all.ru/3.15/c-api/stable.html#stable).*561562Объект типа для представления элементов словаря. В Python это тип объекта, возвращаемого [`dict.items()`](https://python-all.ru/3.15/library/stdtypes.html#dict.items).563564#### `int PyDictItems_Check(PyObject *op)`565566Возвращает true, если *op* является экземпляром представления элементов словаря. Эта функция всегда завершается успешно.567568## Объекты замороженных словарей569570Добавлено в версии 3.15.571572#### `PyTypeObject PyFrozenDict_Type`573574Этот экземпляр [`PyTypeObject`](https://python-all.ru/3.15/c-api/type.html#c.PyTypeObject) представляет замороженный тип словаря Python. Это тот же объект, что и [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict) на уровне Python.575576#### `int PyAnyDict_Check(PyObject *p)`577578Возвращает true, если *p* является объектом [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict), объектом [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict) или экземпляром подтипа типа `dict` или `frozendict`. Эта функция всегда завершается успешно.579580#### `int PyAnyDict_CheckExact(PyObject *p)`581582Возвращает true, если *p* является объектом [`dict`](https://python-all.ru/3.15/library/stdtypes.html#dict) или объектом [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict), но не экземпляром подтипа типа `dict` или `frozendict`. Эта функция всегда завершается успешно.583584#### `int PyFrozenDict_Check(PyObject *p)`585586Возвращает true, если *p* является объектом [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict) или экземпляром подтипа типа `frozendict`. Эта функция всегда завершается успешно.587588#### `int PyFrozenDict_CheckExact(PyObject *p)`589590Возвращает true, если *p* является объектом [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict), но не экземпляром подтипа типа `frozendict`. Эта функция всегда завершается успешно.591592#### `PyObject *PyFrozenDict_New(PyObject *iterable)`593594Возвращает новый [`frozendict`](https://python-all.ru/3.15/library/stdtypes.html#frozendict) из итерируемого объекта или `NULL` при неудаче с установленным исключением.595596Создаёт пустой словарь, если *iterable* равен `NULL`.597598## Упорядоченные словари599600C API Python предоставляет интерфейс для [`collections.OrderedDict`](https://python-all.ru/3.15/library/collections.html#collections.OrderedDict) из C. Начиная с Python 3.7, словари упорядочены по умолчанию, поэтому обычно нет особой необходимости в этих функциях; где возможно, предпочитайте `PyDict*`.601602#### `PyTypeObject PyODict_Type`603604Объект типа для упорядоченных словарей. Это тот же объект, что и [`collections.OrderedDict`](https://python-all.ru/3.15/library/collections.html#collections.OrderedDict) на уровне Python.605606#### `int PyODict_Check(PyObject *od)`607608Возвращает true, если *od* является объектом упорядоченного словаря или экземпляром подтипа типа [`OrderedDict`](https://python-all.ru/3.15/library/collections.html#collections.OrderedDict). Эта функция всегда завершается успешно.609610#### `int PyODict_CheckExact(PyObject *od)`611612Возвращает true, если *od* является объектом упорядоченного словаря, но не экземпляром подтипа типа [`OrderedDict`](https://python-all.ru/3.15/library/collections.html#collections.OrderedDict). Эта функция всегда завершается успешно.613614#### `PyTypeObject PyODictKeys_Type`615616Аналог [`PyDictKeys_Type`](https://python-all.ru/3.15/c-api/dict.html#c.PyDictKeys_Type) для упорядоченных словарей.617618#### `PyTypeObject PyODictValues_Type`619620Аналог [`PyDictValues_Type`](https://python-all.ru/3.15/c-api/dict.html#c.PyDictValues_Type) для упорядоченных словарей.621622#### `PyTypeObject PyODictItems_Type`623624Аналог [`PyDictItems_Type`](https://python-all.ru/3.15/c-api/dict.html#c.PyDictItems_Type) для упорядоченных словарей.625626#### `PyObject *PyODict_New(void)`627628Возвращает новый пустой упорядоченный словарь или `NULL` при ошибке.629630Это аналог [`PyDict_New()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_New).631632#### `int PyODict_SetItem(PyObject *od, PyObject *key, PyObject *value)`633634Вставляет значение *value* в упорядоченный словарь *od* с ключом *key*. Возвращает `0` при успехе или `-1` с установленным исключением при ошибке.635636Это аналог [`PyDict_SetItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_SetItem).637638#### `int PyODict_DelItem(PyObject *od, PyObject *key)`639640Удаляет запись из упорядоченного словаря *od* с ключом *key*. Возвращает `0` при успехе или `-1` с установленным исключением при ошибке.641642Это аналог [`PyDict_DelItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_DelItem).643644Это [мягко устаревшие](https://python-all.ru/3.15/glossary.html#term-soft-deprecated) псевдонимы для API `PyDict`:645646| `PyODict` | `PyDict` |647| --- | --- |648| PyODict\_GetItem(od, key) | [`PyDict_GetItem()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItem) |649| PyODict\_GetItemWithError(od, key) | [`PyDict_GetItemWithError()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemWithError) |650| PyODict\_GetItemString(od, key) | [`PyDict_GetItemString()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GetItemString) |651| PyODict\_Contains(od, key) | [`PyDict_Contains()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Contains) |652| PyODict\_Size(od) | [`PyDict_Size()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_Size) |653| PyODict\_SIZE(od) | [`PyDict_GET_SIZE()`](https://python-all.ru/3.15/c-api/dict.html#c.PyDict_GET_SIZE) |654