字典对象

PyDictObject
PyObject的子类型表示一个Python字典对象.
PyTypeObject PyDict_Type
PyTypeObject的这个实例表示Python字典类型。这与Python层中dict对象相同.
int PyDict_Check PyObject  *p
如果pdict对象或dicttype的子类型实例,则返回true。
int PyDict_CheckExact PyObject  *p
如果p是一个dict对象,则返回true,但不是dict类型子类的实例.
PyObject* PyDict_New
Return value: New reference.

返回一个新的空字典,或NULL失败.

PyObject* PyDictProxy_New PyObject  *mapping
Return value: New reference.

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

void PyDict_Clear PyObject  *p
清空所有键值对的现有字典.
int PyDict_Contains PyObject  *p,PyObject  *key
确定字典是否p包含key。如果p中的项与key匹配,则返回1,否则返回0。出错,返回-1。这相当于Python表达式key in p.
PyObject * PyDict_Copy的PyObject  *p
Return value: New reference.

返回一个包含与p.

int PyDict_SetItem的PyObject  *p,PyObject  *key,PyObject  *val
插入 value进入字典pkey. key键//必须可以;如果不是,TypeError将被提出。成功时返回0或者失败时-1
int PyDict_SetItemString PyObject  *p,const char  *key,PyObject  *val

value插入字典p使用key作为键。key应该是const char*。关键对象是使用PyUnicode_FromString(key)创建的。成功时返回0-1 onfailure.

int PyDict_DelItemPyObject  *p,PyObject  *key
删除字典中的条目p用键key. key必须是可以清洗的;如果不是,TypeError被提出来了。成功时返回0或失败时-1返回
int PyDict_DelItemString PyObject  *p,const char  *key
删除字典中的条目p由字符串key指定的键。成功时返回0或者-1失败时
PyObject* PyDict_GetItem PyObject  *p,PyObject  *key
Return value: Borrowed reference.

从字典p返回对象,其中有一个密钥key。如果键NULL不存在则返回key,但without设置异常.

注意调用时发生的异常__hash__()__eq__()方法会被压制。要获得错误报告,请使用PyDict_GetItemWithError()代替

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.

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

请注意调用__hash__()__eq__()方法和创建临时字符串对象将被抑制。要获取错误报告使用PyDict_GetItemWithError()而不是

PyObject* PyDict_SetDefault PyObject  *p,PyObject  *key,PyObject  *default
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
迭代字典中的所有键值p。在第一次调用此函数开始迭代之前,Py_ssize_t引用的ppos必须初始化为0;对于字典中的每一对,函数返回true,并且一旦报告了所有对,则返回false。参数pkeypvalue应该指向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  *aPyObject  *b,int  override
迭代映射对象b添加密钥 –字典a.b的值对可以是字典,也可以是支持PyMapping_Keys()PyObject_GetItem()。如果override是真的,现有的对a如果在b,如果a。返回0onsuccess或-1如果异常被提出.
int PyDict_Update PyObject  *a,PyObject  *b
这与C中的PyDict_Merge(a, b, 1)相同,在Python中类似于a.update(b),除了PyDict_Update()如果secondargument没有“keys”属性,则不会回退到一系列键值对的迭代。成功时返回0或者如果出现异常则-1返回
int PyDict_MergeFromSeq2的PyObject  *a,PyObject  *seq2,int  override
更新或合并到字典a,从seq2.seq2中的键值对必须是一个可迭代对象,产生长度为2的可迭代对象,被视为键值对。在重复键的情况下,如果override为真,则最后获胜,否则第一次获胜。成功时返回0或者如果引发异常则返回-1。等价的Python(returnvalue除外):

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版本中的新品.

评论被关闭。