Объекты словарей
-
type PyDictObject -
Этот подтип
PyObjectпредставляет объект словаря Python.
-
PyTypeObject PyDict_Type -
Входит в стабильный 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() -
Возвращаемое значение: новая ссылка. Входит в стабильный ABI.Потокобезопасность: атомарно.
Возвращает новый пустой словарь или
NULLв случае ошибки.
-
PyObject *PyDictProxy_New(PyObject *mapping) -
Возвращаемое значение: новая ссылка. Входит в стабильный ABI.
Возвращает объект
types.MappingProxyTypeдля отображения, обеспечивающего доступ только для чтения. Обычно это используется для создания представления, предотвращающего изменение словаря для нединамических типов классов.
-
PyTypeObject PyDictProxy_Type -
Входит в стабильный ABI.
Объект типа для объектов proxy отображения, создаваемых с помощью
PyDictProxy_New(), а также для атрибута__dict__, доступного только для чтения, у многих встроенных типов. ЭкземплярPyDictProxy_Typeпредоставляет динамическое представление базового словаря только для чтения: изменения базового словаря отражаются в proxy, но сам proxy не поддерживает операции изменения. В Python этому соответствуетtypes.MappingProxyType.
-
void PyDict_Clear(PyObject *p) -
Входит в стабильный ABI.Потокобезопасность: атомарно.
Удаляет из существующего словаря все пары ключ-значение.
-
int PyDict_Contains(PyObject *p, PyObject *key) -
Входит в стабильный ABI.Потокобезопасность: безопасно для параллельного использования с одним и тем же объектом.
Определяет, содержит ли словарь p ключ key. Если элемент в p соответствует key, возвращает
1, в противном случае возвращает0. В случае ошибки возвращает-1. Эквивалентно выражению Pythonkey in p.
-
int PyDict_ContainsString(PyObject *p, const char *key) -
Потокобезопасность: атомарно.
Это то же самое, что и
PyDict_Contains(), но key задаётся как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Добавлено в версии 3.13.
-
PyObject *PyDict_Copy(PyObject *p) -
Возвращаемое значение: новая ссылка. Входит в стабильный ABI.Потокобезопасность: атомарно.
Возвращает новый словарь с теми же парами ключ-значение, что и в p.
-
int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val) -
Входит в стабильный ABI.Потокобезопасность: безопасно для параллельного использования с одним и тем же объектом.
Вставляет val в словарь p под ключом key. key должен быть хешируемым; в противном случае будет вызвано исключение
TypeError. В случае успеха возвращает0, а в случае ошибки —-1. Эта функция не «забирает» ссылку на val.
-
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val) -
Входит в стабильный ABI.Потокобезопасность: атомарно.
Это то же самое, что и
PyDict_SetItem(), но key задаётся как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.
-
int PyDict_DelItem(PyObject *p, PyObject *key) -
Входит в стабильный ABI.Потокобезопасность: безопасно для параллельного использования с одним и тем же объектом.
Удаляет из словаря p запись с ключом key. key должен быть хешируемым; в противном случае вызывается исключение
TypeError. Если key отсутствует в словаре, вызывается исключениеKeyError. В случае успеха возвращает0, а в случае ошибки —-1.
-
int PyDict_DelItemString(PyObject *p, const char *key) -
Входит в стабильный ABI.Потокобезопасность: атомарно.
Это то же самое, что и
PyDict_DelItem(), но key задаётся как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.
-
int PyDict_GetItemRef(PyObject *p, PyObject *key, PyObject **result) -
Входит в стабильный ABI начиная с версии 3.13.Потокобезопасность: безопасно для параллельного использования с одним и тем же объектом.
Возвращает новую сильную ссылку на объект из словаря p, соответствующий ключу key:
- Если ключ присутствует, устанавливает *result в новую сильную ссылку на значение и возвращает
1. - Если ключ отсутствует, устанавливает *result в
NULLи возвращает0. - В случае ошибки вызывает исключение, устанавливает *result в
NULLи возвращает-1.
Примечание
Операция атомарна при сборке со свободной многопоточностью, если key имеет тип
str,int,float,boolилиbytes.Добавлено в версии 3.13.
См. также функцию
PyObject_GetItem(). - Если ключ присутствует, устанавливает *result в новую сильную ссылку на значение и возвращает
-
PyObject *PyDict_GetItem(PyObject *p, PyObject *key) -
Возвращаемое значение: заимствованная ссылка. Входит в стабильный ABI.Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Возвращает заимствованную ссылку на объект из словаря p, соответствующий ключу key. Если ключ key отсутствует, возвращает
NULL, не устанавливая исключение.Примечание
Исключения, возникающие при вызове этой функцией методов
__hash__()и__eq__(), молча игнорируются. Вместо неё предпочтительно использовать функциюPyDict_GetItemWithError().Примечание
В сборке со свободной многопоточностью возвращённая заимствованная ссылка может стать недействительной, если другой поток одновременно изменит словарь. Предпочтительно использовать
PyDict_GetItemRef(), которая возвращает сильную ссылку.Изменено в версии 3.10: Ранее вызов этого API без присоединённого состояния потока допускался по историческим причинам. Теперь это запрещено.
-
PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key) -
Возвращаемое значение: заимствованная ссылка. Входит в стабильный ABI.Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Вариант
PyDict_GetItem(), который не подавляет исключения. ВозвращаетNULLпри установленном исключении, если произошло исключение. ВозвращаетNULLбез установленного исключения, если ключ отсутствовал.Примечание
В сборке со свободной многопоточностью возвращённая заимствованная ссылка может стать недействительной, если другой поток одновременно изменит словарь. Предпочтительно использовать
PyDict_GetItemRef(), которая возвращает сильную ссылку.
-
PyObject *PyDict_GetItemString(PyObject *p, const char *key) -
Возвращаемое значение: заимствованная ссылка. Входит в стабильный ABI.Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Это то же самое, что и
PyDict_GetItem(), но key задаётся как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Примечание
Исключения, возникающие при вызове этой функцией методов
__hash__()и__eq__()или при создании временного объектаstr, молча игнорируются. Предпочтительно использовать функциюPyDict_GetItemWithError()с собственным ключом key, созданным с помощьюPyUnicode_FromString().Примечание
В сборке со свободной многопоточностью возвращённая заимствованная ссылка может стать недействительной, если другой поток одновременно изменит словарь. Предпочтительно использовать
PyDict_GetItemStringRef(), которая возвращает сильную ссылку.
-
int PyDict_GetItemStringRef(PyObject *p, const char *key, PyObject **result) -
Входит в стабильный ABI начиная с версии 3.13.Потокобезопасность: атомарно.
Аналогично
PyDict_GetItemRef(), но key задаётся как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Добавлено в версии 3.13.
-
PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj) -
Возвращаемое значение: заимствованная ссылка.Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Это аналог метода
dict.setdefault()на уровне Python. Если ключ присутствует, возвращает соответствующее ему значение из словаря p. Если ключа нет в словаре, он добавляется со значением defaultobj, и возвращается defaultobj. Эта функция вычисляет хеш-функцию key только один раз, а не отдельно при поиске и вставке.Добавлено в версии 3.4.
Примечание
В сборке со свободной многопоточностью возвращённая заимствованная ссылка может стать недействительной, если другой поток одновременно изменит словарь. Предпочтительно использовать
PyDict_SetDefaultRef(), которая возвращает сильную ссылку.
-
int PyDict_SetDefaultRef(PyObject *p, PyObject *key, PyObject *default_value, PyObject **result) -
Потокобезопасность: безопасно для параллельного использования с одним и тем же объектом.
Вставляет default_value в словарь p под ключом key, если ключ ещё не присутствует в словаре. Если result не равен
NULL, то *result устанавливается в сильную ссылку либо на default_value, если ключ отсутствовал, либо на существующее значение, если key уже был в словаре. Возвращает1, если ключ присутствовал и default_value не был вставлен, или0, если ключ отсутствовал и default_value был вставлен. В случае ошибки возвращает-1, устанавливает исключение и присваивает*resultзначениеNULL.Для ясности: если до вызова этой функции у вас есть сильная ссылка на default_value, то после её завершения у вас будут сильные ссылки и на default_value, и на *result (если он не равен
NULL). Они могут указывать на один и тот же объект; в этом случае у вас будут две отдельные ссылки на него.Примечание
Операция атомарна при сборке со свободной многопоточностью, если key имеет тип
str,int,float,boolилиbytes.Добавлено в версии 3.13.
-
int PyDict_Pop(PyObject *p, PyObject *key, PyObject **result) -
Потокобезопасность: безопасно для параллельного использования с одним и тем же объектом.
Удаляет key из словаря p и, если указано, возвращает удалённое значение. Не вызывает исключение
KeyError, если ключ отсутствует.- Если ключ присутствует, устанавливает *result в новую ссылку на удалённое значение, если result не равен
NULL, и возвращает1. - Если ключ отсутствует, устанавливает *result в
NULL, если result не равенNULL, и возвращает0. - В случае ошибки вызывает исключение и возвращает
-1.
Аналогично
dict.pop(), но без значения по умолчанию и без вызова исключенияKeyError, если ключ отсутствует.Примечание
Операция атомарна при сборке со свободной многопоточностью, если key имеет тип
str,int,float,boolилиbytes.Добавлено в версии 3.13.
- Если ключ присутствует, устанавливает *result в новую ссылку на удалённое значение, если result не равен
-
int PyDict_PopString(PyObject *p, const char *key, PyObject **result) -
Потокобезопасность: атомарно.
Аналогично
PyDict_Pop(), но key задаётся как строка байтов в кодировке UTF-8 типа const char*, а не как PyObject*.Добавлено в версии 3.13.
-
PyObject *PyDict_Items(PyObject *p) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает
PyListObject, содержащий все элементы словаря.
-
PyObject *PyDict_Keys(PyObject *p) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает
PyListObject, содержащий все ключи словаря.
-
PyObject *PyDict_Values(PyObject *p) -
Возвращаемое значение: новая ссылка. Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает
PyListObject, содержащий все значения словаря p.
-
Py_ssize_t PyDict_Size(PyObject *p) -
Часть стабильного ABI. Потокобезопасность: атомарно.
Возвращает количество элементов в словаре. Это эквивалентно
len(p)для словаря.
-
Py_ssize_t PyDict_GET_SIZE(PyObject *p) -
Потокобезопасность: атомарно.
Аналогично
PyDict_Size(), но без проверки ошибок.
-
int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue) -
Часть стабильного ABI. Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Перебирает все пары «ключ — значение» в словаре p. Указатель
Py_ssize_t, на который ссылается ppos, необходимо инициализировать значением0перед первым вызовом этой функции, чтобы начать перебор; функция возвращает истину для каждой пары в словаре и ложь, когда все пары уже обработаны. Параметры 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); }В сборке без глобальной блокировки интерпретатора функция не является потокобезопасной без внешней синхронизации. Чтобы заблокировать словарь на время перебора, можно использовать
Py_BEGIN_CRITICAL_SECTION:Py_BEGIN_CRITICAL_SECTION(self->dict); while (PyDict_Next(self->dict, &pos, &key, &value)) { ... } Py_END_CRITICAL_SECTION();Примечание
В сборке без глобальной блокировки интерпретатора эту функцию можно безопасно использовать внутри критической секции. Однако ссылки, возвращаемые для pkey и pvalue, являются заимствованными и действительны только пока удерживается критическая секция. Если эти объекты нужны за пределами критической секции или критическая секция может быть приостановлена, создайте сильную ссылку (например, с помощью
Py_NewRef()).
-
int PyDict_Merge(PyObject *a, PyObject *b, int override) -
Часть стабильного ABI. Потокобезопасность: безопасно для параллельного использования одного и того же объекта.
Перебирает объект-отображение b, добавляя пары «ключ — значение» в словарь a. b может быть словарём или любым объектом, поддерживающим
PyMapping_Keys()иPyObject_GetItem(). Если override имеет значение true, существующие пары в a будут заменены при обнаружении совпадающего ключа в b; в противном случае пары будут добавлены, только если соответствующего ключа нет в a. В случае успеха возвращает0, а если возникло исключение —-1.Примечание
В сборке без глобальной блокировки интерпретатора, если b является
dict(со стандартным итератором), оба объекта, a и b, блокируются на время операции. Если b является отображением, отличным от словаря, блокируется только a; другой поток может одновременно изменять b.
-
int PyDict_Update(PyObject *a, PyObject *b) -
Часть стабильного ABI. Потокобезопасность: безопасно для параллельного использования одного и того же объекта.
В C это то же самое, что
PyDict_Merge(a, b, 1), а в Python аналогичноa.update(b), за исключением того, чтоPyDict_Update()не переключается на перебор последовательности пар «ключ — значение», если у второго аргумента нет атрибута «keys». В случае успеха возвращает0, а если возникло исключение —-1.Примечание
В сборке без глобальной блокировки интерпретатора, если b является
dict(со стандартным итератором), оба объекта, a и b, блокируются на время операции. Если b является отображением, отличным от словаря, блокируется только a; другой поток может одновременно изменять b.
-
int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override) -
Часть стабильного 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Примечание
В сборке без глобальной блокировки интерпретатора блокируется только a. Перебор seq2 не синхронизирован; другой поток может одновременно изменять seq2.
-
int PyDict_AddWatcher(PyDict_WatchCallback callback) -
Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Регистрирует callback в качестве наблюдателя словаря. Возвращает неотрицательный целочисленный идентификатор, который необходимо передавать в последующие вызовы
PyDict_Watch(). В случае ошибки (например, если больше нет доступных идентификаторов наблюдателей) возвращает-1и устанавливает исключение.Примечание
Эта функция не синхронизируется внутри себя. В сборке без глобальной блокировки интерпретатора вызывающий код должен гарантировать, что параллельно не выполняются вызовы
PyDict_AddWatcher()илиPyDict_ClearWatcher().Добавлено в версии 3.12.
-
int PyDict_ClearWatcher(int watcher_id) -
Потокобезопасность: безопасно вызывать из нескольких потоков только при внешней синхронизации.
Удаляет наблюдателя с идентификатором watcher_id, ранее возвращённым
PyDict_AddWatcher(). В случае успеха возвращает0, в случае ошибки —-1(например, если указанный watcher_id никогда не регистрировался).Примечание
Эта функция не синхронизируется внутри себя. В сборке без глобальной блокировки интерпретатора вызывающий код должен гарантировать, что параллельно не выполняются вызовы
PyDict_AddWatcher()илиPyDict_ClearWatcher().Добавлено в версии 3.12.
-
int PyDict_Watch(int watcher_id, PyObject *dict) -
Потокобезопасность: безопасно вызывать без внешней синхронизации для разных объектов.
Помечает словарь dict как отслеживаемый. Функция обратного вызова, связанная с watcher_id посредством
PyDict_AddWatcher(), будет вызвана при изменении или освобождении dict. В случае успеха возвращает0, в случае ошибки —-1.Добавлено в версии 3.12.
-
int PyDict_Unwatch(int watcher_id, PyObject *dict) -
Потокобезопасность: безопасно вызывать без внешней синхронизации для разных объектов.
Снимает отслеживание словаря dict. Функция обратного вызова, связанная с watcher_id посредством
PyDict_AddWatcher(), больше не будет вызываться при изменении или освобождении dict. Ранее этот наблюдатель должен был начать отслеживать словарь. В случае успеха возвращает0, в случае ошибки —-1.Добавлено в версии 3.12.
-
type PyDict_WatchEvent -
Перечисление возможных событий наблюдателя словаря:
PyDict_EVENT_ADDED,PyDict_EVENT_MODIFIED,PyDict_EVENT_DELETED,PyDict_EVENT_CLONED,PyDict_EVENT_CLEAREDилиPyDict_EVENT_DEALLOCATED.Добавлено в версии 3.12.
-
typedef int (*PyDict_WatchCallback)(PyDict_WatchEvent event, PyObject *dict, PyObject *key, PyObject *new_value) -
Тип функции обратного вызова наблюдателя словаря.
Если 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.Событие
PyDict_EVENT_CLONEDвозникает, когда словарь dict ранее был пуст, а в него объединяется другой словарь. Чтобы сохранить эффективность этой операции, в этом случае событияPyDict_EVENT_ADDEDдля отдельных ключей не генерируются; вместо этого генерируется одно событиеPyDict_EVENT_CLONED, а key будет исходным словарём.Функция обратного вызова может просматривать dict, но не должна изменять его; это может привести к непредсказуемым последствиям, включая бесконечную рекурсию. Не запускайте выполнение кода Python внутри функции обратного вызова, поскольку он может изменить словарь как побочный эффект.
Если event равен
PyDict_EVENT_DEALLOCATED, создание в функции обратного вызова новой ссылки на словарь, который собираются уничтожить, воскресит его и помешает освободить его в этот момент. Когда воскресший объект будет уничтожен позже, все активные на тот момент функции обратного вызова наблюдателей будут вызваны повторно.Функции обратного вызова вызываются до внесения уведомляемого изменения в dict, поэтому можно проверить предыдущее состояние dict.
Если функция обратного вызова устанавливает исключение, она должна вернуть
-1; это исключение будет выведено как необрабатываемое с помощьюPyErr_WriteUnraisable(). В противном случае она должна вернуть0.При входе в функцию обратного вызова уже может быть установлено ожидающее исключение. В этом случае функция обратного вызова должна вернуть
0, оставив то же исключение установленным. Это означает, что функция обратного вызова не может вызывать другие API, которые могут установить исключение, если предварительно не сохранит и не очистит состояние исключения, а перед возвратом не восстановит его.Добавлено в версии 3.12.
Объекты-представления словаря
-
int PyDictViewSet_Check(PyObject *op) -
Возвращает истину, если op является представлением множества внутри словаря. В настоящее время это эквивалентно PyDictKeys_Check(op) || PyDictItems_Check(op). Эта функция всегда завершается успешно.
-
PyTypeObject PyDictKeys_Type -
Часть стабильного ABI.
Объект типа для представления ключей словаря. В Python это тип объекта, возвращаемого
dict.keys().
-
int PyDictKeys_Check(PyObject *op) -
Возвращает истину, если op является экземпляром представления ключей словаря. Эта функция всегда завершается успешно.
-
PyTypeObject PyDictValues_Type -
Часть стабильного ABI.
Объект типа для представления значений словаря. В Python это тип объекта, возвращаемого
dict.values().
-
int PyDictValues_Check(PyObject *op) -
Возвращает истину, если op является экземпляром представления значений словаря. Эта функция всегда завершается успешно.
-
PyTypeObject PyDictItems_Type -
Часть стабильного ABI.
Объект типа для представления элементов словаря. В Python это тип объекта, возвращаемого
dict.items().
-
int PyDictItems_Check(PyObject *op) -
Возвращает истину, если op является экземпляром представления элементов словаря. Эта функция всегда завершается успешно.
Упорядоченные словари
C API Python предоставляет интерфейс для работы с collections.OrderedDict из C. Начиная с Python 3.7 словари упорядочены по умолчанию, поэтому обычно эти функции не нужны; по возможности предпочитайте PyDict*.
-
PyTypeObject PyODict_Type -
Объект типа для упорядоченных словарей. Это тот же объект, что и
collections.OrderedDictна уровне Python.
-
int PyODict_Check(PyObject *od) -
Возвращает истину, если od является объектом упорядоченного словаря или экземпляром подкласса типа
OrderedDict. Эта функция всегда завершается успешно.
-
int PyODict_CheckExact(PyObject *od) -
Возвращает истину, если od является объектом упорядоченного словаря, но не экземпляром подкласса типа
OrderedDict. Эта функция всегда завершается успешно.
-
PyTypeObject PyODictKeys_Type -
Аналог
PyDictKeys_Typeдля упорядоченных словарей.
-
PyTypeObject PyODictValues_Type -
Аналог
PyDictValues_Typeдля упорядоченных словарей.
-
PyTypeObject PyODictItems_Type -
Аналог
PyDictItems_Typeдля упорядоченных словарей.
-
PyObject *PyODict_New(void) -
Возвращает новый пустой упорядоченный словарь или
NULLв случае сбоя.Аналог
PyDict_New().
-
int PyODict_SetItem(PyObject *od, PyObject *key, PyObject *value) -
Вставляет value в упорядоченный словарь od под ключом key. В случае успеха возвращает
0, а в случае сбоя —-1с установленным исключением.Аналог
PyDict_SetItem().
-
int PyODict_DelItem(PyObject *od, PyObject *key) -
Удаляет из упорядоченного словаря od элемент с ключом key. В случае успеха возвращает
0, а в случае сбоя —-1с установленным исключением.Аналог
PyDict_DelItem().
Это нестрого устаревшие псевдонимы для API PyDict:
|
|
|---|---|
| |
| |
| |
| |
| |
|
© 2001 Python Software Foundation
Licensed under the PSF License.
https://docs.python.org/3.14/c-api/dict.html