Об’єкти словника¶
-
PyTypeObject
PyDict_Type
¶ Цей екземпляр
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.
Повертає новий порожній словник або
NULL
у разі помилки.
-
PyObject*
PyDictProxy_New
(PyObject *mapping)¶ - Return value: New reference.
Повертає об’єкт
types.MappingProxyType
для зіставлення, яке забезпечує поведінку лише для читання. Зазвичай це використовується для створення представлення для запобігання модифікації словника для нединамічних типів класів.
-
int
PyDict_Contains
(PyObject *p, PyObject *key)¶ Визначте, чи словник p містить ключ. Якщо елемент у p відповідає ключу, поверніть
1
, інакше поверніть0
. У разі помилки повертає-1
. Це еквівалентно виразу Pythonkey in p
.
-
PyObject*
PyDict_Copy
(PyObject *p)¶ - Return value: New reference.
Повертає новий словник, який містить ті самі пари ключ-значення, що й p.
-
int
PyDict_SetItem
(PyObject *p, PyObject *key, PyObject *val)¶ Вставте val у словник p з ключем key. ключ має бути hashable; якщо це не так, буде викликано
TypeError
. Повертає0
у разі успіху або-1
у разі невдачі. Ця функція не викрадає посилання на val.
-
int
PyDict_SetItemString
(PyObject *p, const char *key, PyObject *val)¶ Insert val into the dictionary p using key as a key. key should be a
const char*
. The key object is created usingPyUnicode_FromString(key)
. Return0
on success or-1
on failure. This function does not steal a reference to val.
-
int
PyDict_DelItem
(PyObject *p, PyObject *key)¶ 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. Return0
on success or-1
on failure.
-
int
PyDict_DelItemString
(PyObject *p, const char *key)¶ Remove the entry in dictionary p which has a key specified by the string key. If key is not in the dictionary,
KeyError
is raised. Return0
on success or-1
on failure.
-
PyObject*
PyDict_GetItem
(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference.
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.Note that exceptions which occur while calling
__hash__()
and__eq__()
methods will get suppressed. To get error reporting usePyDict_GetItemWithError()
instead.
-
PyObject*
PyDict_GetItemWithError
(PyObject *p, PyObject *key)¶ - Return value: Borrowed reference.
Варіант
PyDict_GetItem()
, який не пригнічує винятки. ПовертаєNULL
з встановленим винятком, якщо виняток стався. ПовертаєNULL
без набору винятків, якщо ключ відсутній.
-
PyObject*
PyDict_GetItemString
(PyObject *p, const char *key)¶ - Return value: Borrowed reference.
This is the same as
PyDict_GetItem()
, but key is specified as aconst char*
, rather than aPyObject*
.Note that exceptions which occur while calling
__hash__()
and__eq__()
methods and creating a temporary string object will get suppressed. To get error reporting usePyDict_GetItemWithError()
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.
Повертає
PyListObject
, що містить усі елементи зі словника.
-
PyObject*
PyDict_Keys
(PyObject *p)¶ - Return value: New reference.
Повертає
PyListObject
, що містить усі ключі зі словника.
-
PyObject*
PyDict_Values
(PyObject *p)¶ - Return value: New reference.
Повертає
PyListObject
, що містить усі значення зі словника p.
-
Py_ssize_t
PyDict_Size
(PyObject *p)¶ Повернути кількість елементів у словнику. Це еквівалентно
len(p)
у словнику.
-
int
PyDict_Next
(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)¶ Iterate over all key-value pairs in the dictionary p. The
Py_ssize_t
referred to by ppos must be initialized to0
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 toPyObject*
variables that will be filled in with each key and value, respectively, or may beNULL
. 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)¶ Ітерація об’єкта відображення b, додавання пар ключ-значення до словника a. b може бути словником або будь-яким об’єктом, що підтримує
PyMapping_Keys()
іPyObject_GetItem()
. Якщо override має значення true, існуючі пари в a буде замінено, якщо відповідний ключ буде знайдено в b, інакше пари будуть додані, лише якщо в a немає відповідного ключа. Повертає0
у разі успіху або-1
, якщо було викликано виключення.
-
int
PyDict_Update
(PyObject *a, PyObject *b)¶ Це те саме, що
PyDict_Merge(a, b, 1)
у C, і схоже наa.update(b)
у Python, за винятком того, щоPyDict_Update()
не падає повернутися до повторення послідовності пар ключ-значення, якщо другий аргумент не має атрибута «ключі». Повертає0
у разі успіху або-1
, якщо було викликано виключення.
-
int
PyDict_MergeFromSeq2
(PyObject *a, PyObject *seq2, int override)¶ Оновіть або об’єднайте в словник 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