字典对象¶
-
PyTypeObject PyDict_Type¶
此实例
PyTypeObject
表示python字典类型。这是同一个对象dict
在python层中。
-
PyObject *PyDictProxy_New(PyObject *mapping)¶
- Return value: New reference.
返回A
types.MappingProxyType
用于强制执行只读行为的映射的对象。这通常用于创建视图,以防止修改非动态类类型的字典。
-
int PyDict_Contains(PyObject *p, PyObject *key)¶
确定字典是否 p 包含 key . 如果一个项目 p 是火柴 key 返回
1
,否则返回0
. 出错时返回-1
. 这相当于python表达式key in p
.
-
int PyDict_SetItem(PyObject *p, PyObject *key, PyObject *val)¶
插入 val 进入字典 p 用钥匙 key . key 必须是 hashable 如果不是,
TypeError
将被提升。返回0
关于成功还是-1
失败时。这个函数 不 窃取对的引用 val .
-
int PyDict_SetItemString(PyObject *p, const char *key, PyObject *val)¶
插入 val 进入字典 p 使用 key 作为一把钥匙。 key 应该是 const char* . 键对象是使用
PyUnicode_FromString(key)
. 返回0
关于成功还是-1
失败时。这个函数 不 窃取对的引用 val .
-
int PyDict_DelItem(PyObject *p, PyObject *key)¶
删除字典中的条目 p 带钥匙 key . key 必须是可哈希的;如果不是,
TypeError
提高了。如果 key 不在字典里,KeyError
提高了。返回0
关于成功还是-1
失败论。
-
int PyDict_DelItemString(PyObject *p, const char *key)¶
删除字典中的条目 p 其键由字符串指定 key .如果 key 不在字典里,
KeyError
提高了。返回0
关于成功还是-1
失败论。
-
PyObject *PyDict_GetItem(PyObject *p, PyObject *key)¶
- Return value: Borrowed reference.
从字典返回对象 p 它有一把钥匙 key . 返回
NULL
如果钥匙 key 不存在,但 没有 设置异常。请注意,调用时发生的异常
__hash__()
和__eq__()
方法将被抑制。要获取错误报告,请使用PyDict_GetItemWithError()
相反。在 3.10 版更改: 在没有 GIL 因为历史原因被允许关押。这是不允许的。
-
PyObject *PyDict_GetItemWithError(PyObject *p, PyObject *key)¶
- Return value: Borrowed reference.
Variant of
PyDict_GetItem()
that does not suppress exceptions. ReturnNULL
with an exception set if an exception occurred. ReturnNULL
without an exception set if the key wasn't present.
-
PyObject *PyDict_GetItemString(PyObject *p, const char *key)¶
- Return value: Borrowed reference.
这和
PyDict_GetItem()
,但是 key 被指定为 const char* ,而不是 PyObject* .请注意,调用时发生的异常
__hash__()
和__eq__()
方法和创建临时字符串对象将被禁止。要获取错误报告,请使用PyDict_GetItemWithError()
相反。
-
PyObject *PyDict_SetDefault(PyObject *p, PyObject *key, PyObject *defaultobj)¶
- Return value: Borrowed reference.
这与python级别相同
dict.setdefault()
. 如果存在,则返回对应于 key 从字典中 p . 如果密钥不在dict中,则插入值为 德布托 和 德布托 返回。此函数计算的hash函数 key 只进行一次,而不是对其进行独立的查找和插入评估。3.4 新版功能.
-
PyObject *PyDict_Items(PyObject *p)¶
- Return value: New reference.
返回A
PyListObject
包含字典中的所有项。
-
PyObject *PyDict_Keys(PyObject *p)¶
- Return value: New reference.
返回A
PyListObject
包含字典中的所有键。
-
PyObject *PyDict_Values(PyObject *p)¶
- Return value: New reference.
返回A
PyListObject
包含字典中的所有值 p .
-
int PyDict_Next(PyObject *p, Py_ssize_t *ppos, PyObject **pkey, PyObject **pvalue)¶
迭代字典中的所有键值对 p . 这个
Py_ssize_t
引用人 ppos 必须初始化为0
在第一次调用此函数以开始迭代之前,函数将为字典中的每对返回true,并在报告了所有对之后返回false。参数 pkey 和 价值观 应该指向 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); }
-
int PyDict_Merge(PyObject *a, PyObject *b, int override)¶
迭代映射对象 b 向字典中添加键值对 a . b 可能是字典或任何支持的对象
PyMapping_Keys()
和PyObject_GetItem()
.如果 覆盖 是真的,现有对位于 a 如果在 b ,否则仅当中没有匹配的密钥时才会添加对。 a . 返回0
关于成功还是-1
如果引发异常。
-
int PyDict_Update(PyObject *a, PyObject *b)¶
这和
PyDict_Merge(a, b, 1)
在C中,并且类似于a.update(b)
在 Python 中,除了PyDict_Update()
如果第二个参数没有“keys”属性,则不会返回到对键-值序列的迭代。返回0
关于成功还是-1
如果引发异常。
-
int PyDict_MergeFromSeq2(PyObject *a, PyObject *seq2, int override)¶
更新或合并到词典 a ,从中的键值对 seq2 . seq2 必须是可Iterable对象,生成长度为2的可Iterable对象,视为键值对。如果钥匙重复,最后一个赢如果 覆盖 是真的,否则第一个赢。返回
0
关于成功还是-1
如果引发异常。等效python(返回值除外)::def PyDict_MergeFromSeq2(a, seq2, override): for key, value in seq2: if override or key not in a: a[key] = value