# Об’єкти словника

type PyDictObject

  Цей підтип `PyObject` представляє об’єкт словника Python.

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`. Це еквівалентно виразу Python `key 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. ключ має бути hashable; якщо це не так, буде викликано `TypeError`. Повертає `0` у разі успіху або `-1` у разі невдачі. Ця функція не викрадає посилання на val.

int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)
  Part of the Stable ABI.

  This is the same as `PyDict_SetItem()`, but key is specified as a const char* UTF-8 encoded bytes string, rather than a PyObject*.

int PyDict_DelItem(PyObject *p, PyObject *key)
  Part of the Stable ABI.

  Remove the entry in dictionary p with key key. key must be hashable; if it isn’t, `TypeError` is raised. If key is not in the dictionary, `KeyError` is raised. Return `0` on success or `-1` on failure.

int PyDict_DelItemString(PyObject *p, const char *key)
  Part of the Stable ABI.

  This is the same as `PyDict_DelItem()`, but key is specified as a const char* UTF-8 encoded bytes string, rather than a PyObject*.

PyObject *PyDict_GetItem(PyObject *p, PyObject *key)
  Return value: Borrowed reference. Part of the Stable ABI.

  Return the object from dictionary p which has a key key. Return `NULL` if the key key is not present, but without setting an exception.

  Примітка

  Exceptions that occur while this calls `__hash__()` and `__eq__()` methods are silently ignored. Prefer the `PyDict_GetItemWithError()` function instead.

  Змінено в версії 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.

  This is the same as `PyDict_GetItem()`, but key is specified as a const char* UTF-8 encoded bytes string, rather than a PyObject*.

  Примітка

  Exceptions that occur while this calls `__hash__()` and `__eq__()` methods or while creating the temporary `str` object are silently ignored. Prefer using the `PyDict_GetItemWithError()` function with your own `PyUnicode_FromString()` key instead.

PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)
  Return value: Borrowed reference.

  Це те саме, що на рівні Python `dict.setdefault()`. Якщо він присутній, він повертає значення, що відповідає 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.

  Iterate over all key-value pairs in the dictionary p. The `Py_ssize_t` referred to by ppos must be initialized to `0` prior to the first call to this function to start the iteration; the function returns true for each pair in the dictionary, and false once all pairs have been reported. The parameters pkey and pvalue should either point to PyObject* variables that will be filled in with each key and value, respectively, or may be `NULL`. Any references returned through them are borrowed. ppos should not be altered during iteration. Its value represents offsets within the internal dictionary structure, and since the structure is sparse, the offsets are not consecutive.

  Наприклад:

      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()` не падає повернутися до повторення послідовності пар ключ-значення, якщо другий аргумент не має атрибута «ключі». Повертає `0` у разі успіху або `-1`, якщо було викликано виключення.

int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)
  Part of the Stable 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