Dictionary Objects
-
PyDictObject
- PyObject的此子类型表示 Python 字典对象。
-
PyTypeObject
PyDict_Type
- PyTypeObject的此实例表示 Python 字典类型。该对象与 Python 层中的dict相同。
-
int
PyDict_Check
(PyObject ** p *)- 如果* p *是 dict 对象或 dict 类型的子类型的实例,则返回 true。
-
int
PyDict_CheckExact
(PyObject ** p *)- 如果* p *是 dict 对象,但不是 dict 类型的子类型的实例,则返回 true。
-
PyObject*
PyDict_New
( )- 返回值:新参考.
返回一个新的空字典,如果失败则返回NULL
。
返回一个types.MappingProxyType对象,以执行强制只读行为的 Map。这通常用于创建视图,以防止修改非动态类类型的字典。
-
无效
PyDict_Clear
(PyObject ** p *)- 清空所有键值对的现有字典。
-
int
PyDict_Contains
(PyObject *p ,PyObject key *)- 确定字典* p 是否包含 key 。如果 p 中的项与 key *相匹配,则返回
1
,否则返回0
。出错时,返回-1
。这等效于 Python 表达式key in p
。
- 确定字典* p 是否包含 key 。如果 p 中的项与 key *相匹配,则返回
-
PyObject *
PyDict_Copy
(PyObject ** p *)- 返回值:新参考.
返回一个新字典,该字典包含与* p *相同的键值对。
-
int
PyDict_SetItem
(PyObject *p ,PyObject key *,PyObject ** val *) -
int
PyDict_SetItemString
(PyObject *p ,const char key *,PyObject ** val *)- 使用* key 作为键,将 val 插入字典 p 中。 * key 应该是
const char*
。关键对象是使用PyUnicode_FromString(key)
创建的。如果成功则返回0
,如果失败则返回-1
。该Function不会窃取* val *的引用。
- 使用* key 作为键,将 val 插入字典 p 中。 * key 应该是
-
int
PyDict_DelItem
(PyObject *p ,PyObject key *)- 使用键* key 删除字典 p *中的条目。 键必须是可哈希的;如果不是,则引发TypeError。成功返回
0
,失败返回-1
。
- 使用键* key 删除字典 p *中的条目。 键必须是可哈希的;如果不是,则引发TypeError。成功返回
-
int
PyDict_DelItemString
(PyObject *p ,const char key *)- 删除字典* p 中的条目,该条目具有由字符串 key *指定的键。成功返回
0
或失败返回-1
。
- 删除字典* p 中的条目,该条目具有由字符串 key *指定的键。成功返回
-
PyObject *
PyDict_GetItem
(PyObject p ,PyObject 密钥)- *返回值:借用参考。
从具有键* 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。
- Py_ssize_t
PyDict_Size
(PyObject ** p *)- 返回字典中的项目数。这相当于字典上的
len(p)
。
- 返回字典中的项目数。这相当于字典上的
- int
PyDict_Next
(PyObject *p ,Py_ssize_t ppos ,PyObject *** pkey ,PyObject * pvalue *)- 遍历字典* p *中的所有键值对。 * ppos 所引用的
Py_ssize_t
必须在第一次调用此函数开始迭代之前初始化为0
;该函数对字典中的每对返回 true,一旦报告所有对,则返回 false。参数 pkey 和 pvalue *要么指向将分别用每个键和值填充的PyObject*变量,要么可以是NULL
。pass它们返回的所有引用都是借用的。 * ppos *不应在迭代过程中更改。它的值表示内部字典结构中的偏移量,并且由于结构稀疏,因此偏移量不是连续的。
- 遍历字典* p *中的所有键值对。 * ppos 所引用的
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);
}
-
int
PyDict_Merge
(PyObject *a ,PyObject b *,int * override *)- 遍历 Map 对象* b ,将键值对添加到字典 a *。 * b 可以是字典,也可以是任何支持PyMapping_Keys()和PyObject_GetItem()的对象。如果 override 为 true,则在 b 中找到匹配键时,将替换 a 中的现有对,否则,仅在 a *中没有匹配键时才添加对。成功返回
0
,如果引发异常则返回-1
。
- 遍历 Map 对象* b ,将键值对添加到字典 a *。 * b 可以是字典,也可以是任何支持PyMapping_Keys()和PyObject_GetItem()的对象。如果 override 为 true,则在 b 中找到匹配键时,将替换 a 中的现有对,否则,仅在 a *中没有匹配键时才添加对。成功返回
-
整数
PyDict_Update
(PyObject *a ,PyObject b *)- 这与 C 语言中的
PyDict_Merge(a, b, 1)
相同,并且与 Python 中的a.update(b)
相似,不同之处在于,如果第二个参数没有“ keys”属性,则PyDict_Update()不会回退到一系列键值对上。成功返回0
,如果引发异常则返回-1
。
- 这与 C 语言中的
-
int
PyDict_MergeFromSeq2
(PyObject *a ,PyObject seq2 *,int * override *)- 从* seq2 中的键值对更新或合并到字典 a *中。 * seq2 必须是可迭代对象,它产生长度为 2 的可迭代对象,被视为键值对。在重复键的情况下,如果 override *为 true,则最后一个获胜,否则,第一个获胜。成功返回
0
,如果引发异常则返回-1
。等效的 Python(返回值除外):
- 从* seq2 中的键值对更新或合并到字典 a *中。 * seq2 必须是可迭代对象,它产生长度为 2 的可迭代对象,被视为键值对。在重复键的情况下,如果 override *为 true,则最后一个获胜,否则,第一个获胜。成功返回
def PyDict_MergeFromSeq2(a, seq2, override):
for key, value in seq2:
if override or key not in a:
a[key] = value
- int
PyDict_ClearFreeList
()- 清除空闲列表。返回释放的项目总数。
版本 3.3 中的新Function。