字典对象 – 具体对象层(Python教程)(参考资料)
字典对象
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
.
- int
PyDict_SetItem
(的PyObject *p,PyObject *key,PyObject *val) - 插入 value进入字典p用key. 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_DelItem
(PyObject *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*
,而不是aPyObject*
.请注意调用
__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。参数pkey和pvalue应该指向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()
。如果override是真的,现有的对a如果在b,如果a。返回0
onsuccess或-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版本中的新品.
评论被关闭。