Dictionary Objects

返回一个新的空字典,如果失败则返回NULL

返回一个types.MappingProxyType对象,以执行强制只读行为的 Map。这通常用于创建视图,以防止修改非动态类类型的字典。

返回一个新字典,该字典包含与* p *相同的键值对。

从具有键* key 的字典 p 返回对象。如果键 key 不存在,但没有*设置异常,则返回NULL

请注意,调用hash()eq()方法时发生的异常将被抑制。要获取错误报告,请改用PyDict_GetItemWithError()

PyDict_GetItem()的变体,不抑制异常。如果发生异常,则返回NULL with 一个异常集。如果不存在该键,则返回NULL 没有 异常。

这与PyDict_GetItem()相同,但是* key *被指定为const char*而不是PyObject*

请注意,在调用hash()eq()方法并创建临时字符串对象时发生的异常将被抑制。要获取错误报告,请改用PyDict_GetItemWithError()

这与 Python 级别dict.setdefault()相同。如果存在,它将从字典* p 返回与 key 相对应的值。如果键不在字典中,则将其插入值 defaultobj 并返回 defaultobj 。该函数仅对 key *的哈希函数进行一次评估,而不是针对查找和插入对其进行独立评估。

3.4 版的新Function。

返回一个PyListObject,其中包含字典中的所有项目。

返回包含字典中所有键的PyListObject

返回包含字典* p *中所有值的PyListObject

For example:

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);
}
def PyDict_MergeFromSeq2(a, seq2, override):
    for key, value in seq2:
        if override or key not in a:
            a[key] = value

版本 3.3 中的新Function。

首页