Python字典添加,删除,查询等相关操作方法详解
1、实现代码
#创建
stu_info={"xiedi":28,"liuhailin":27,"daiqiao":30,"hanwenhai":25,"chenqun":38}
print(stu_info)
#增加
stu_info["luoahong"]=32
print(stu_info)
#修改
stu_info["xiedi"]=29
print(stu_info)
输出结果
{'xiedi':28,'liuhailin':27,'daiqiao':30,'hanwenhai':25,'chenqun':38}
{'xiedi':28,'liuhailin':27,'daiqiao':30,'hanwenhai':25,'chenqun':38,'luoahong':32}
{'xiedi':29,'liuhailin':27,'daiqiao':30,'hanwenhai':25,'chenqun':38,'luoahong':32}
1、实现代码
delstu_info["chenqun"] print(stu_info)
2、输出结果
{'xiedi':29,'liuhailin':27,'daiqiao':30,'hanwenhai':25,'luoahong':32}
1、Dict_DelItem
int
PyDict_DelItem(PyObject*op,PyObject*key)
{
Py_hash_thash;
assert(key);
if(!PyUnicode_CheckExact(key)||
(hash=((PyASCIIObject*)key)->hash)==-1){
hash=PyObject_Hash(key);
if(hash==-1)
return-1;
}
return_PyDict_DelItem_KnownHash(op,key,hash);
}
2、Dict_DelItem_KnownHash
int
_PyDict_DelItem_KnownHash(PyObject*op,PyObject*key,Py_hash_thash)
{
Py_ssize_tix;
PyDictObject*mp;
PyObject*old_value;
if(!PyDict_Check(op)){
PyErr_BadInternalCall();
return-1;
}
assert(key);
assert(hash!=-1);
mp=(PyDictObject*)op;
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&old_value);
if(ix==DKIX_ERROR)
return-1;
if(ix==DKIX_EMPTY||old_value==NULL){
_PyErr_SetKeyError(key);
return-1;
}
//Splittabledoesn'tallowdeletion.Combineit.
if(_PyDict_HasSplitTable(mp)){
if(dictresize(mp,DK_SIZE(mp->ma_keys))){
return-1;
}
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&old_value);
assert(ix>=0);
}
returndelitem_common(mp,hash,ix,old_value);
}
/*Thisfunctionpromisesthatthepredicate->deletionsequenceisatomic
*(i.e.protectedbytheGIL),assumingthepredicateitselfdoesn't
*releasetheGIL.
*/
3、PyDict_DelItemIf
int
_PyDict_DelItemIf(PyObject*op,PyObject*key,
int(*predicate)(PyObject*value))
{
Py_ssize_thashpos,ix;
PyDictObject*mp;
Py_hash_thash;
PyObject*old_value;
intres;
if(!PyDict_Check(op)){
PyErr_BadInternalCall();
return-1;
}
assert(key);
hash=PyObject_Hash(key);
if(hash==-1)
return-1;
mp=(PyDictObject*)op;
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&old_value);
if(ix==DKIX_ERROR)
return-1;
if(ix==DKIX_EMPTY||old_value==NULL){
_PyErr_SetKeyError(key);
return-1;
}
//Splittabledoesn'tallowdeletion.Combineit.
if(_PyDict_HasSplitTable(mp)){
if(dictresize(mp,DK_SIZE(mp->ma_keys))){
return-1;
}
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&old_value);
assert(ix>=0);
}
res=predicate(old_value);
if(res==-1)
return-1;
hashpos=lookdict_index(mp->ma_keys,hash,ix);
assert(hashpos>=0);
if(res>0)
returndelitem_common(mp,hashpos,ix,old_value);
else
return0;
}
二、删除pop(k)
实现
stu_info={"xiedi":28,"liuhailin":27,"daiqiao":30,"hanwenhai":25,"chenqun":38}
print(stu_info)
stu_info.pop("liuhailin")
print(stu_info)
输出结果:
{'xiedi':28,'liuhailin':27,'daiqiao':30,'hanwenhai':25,'chenqun':38}
{'xiedi':28,'daiqiao':30,'hanwenhai':25,'chenqun':38}
1、_PyDict_Pop
PyObject*
_PyDict_Pop(PyObject*dict,PyObject*key,PyObject*deflt)
{
Py_hash_thash;
if(((PyDictObject*)dict)->ma_used==0){
if(deflt){
Py_INCREF(deflt);
returndeflt;
}
_PyErr_SetKeyError(key);
returnNULL;
}
if(!PyUnicode_CheckExact(key)||
(hash=((PyASCIIObject*)key)->hash)==-1){
hash=PyObject_Hash(key);
if(hash==-1)
returnNULL;
}
return_PyDict_Pop_KnownHash(dict,key,hash,deflt);
}
2、_PyDict_Pop_KnownHash
/*Internalversionofdict.pop().*/
PyObject*
_PyDict_Pop_KnownHash(PyObject*dict,PyObject*key,Py_hash_thash,PyObject*deflt)
{
Py_ssize_tix,hashpos;
PyObject*old_value,*old_key;
PyDictKeyEntry*ep;
PyDictObject*mp;
assert(PyDict_Check(dict));
mp=(PyDictObject*)dict;
if(mp->ma_used==0){
if(deflt){
Py_INCREF(deflt);
returndeflt;
}
_PyErr_SetKeyError(key);
returnNULL;
}
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&old_value);
if(ix==DKIX_ERROR)
returnNULL;
if(ix==DKIX_EMPTY||old_value==NULL){
if(deflt){
Py_INCREF(deflt);
returndeflt;
}
_PyErr_SetKeyError(key);
returnNULL;
}
//Splittabledoesn'tallowdeletion.Combineit.
if(_PyDict_HasSplitTable(mp)){
if(dictresize(mp,DK_SIZE(mp->ma_keys))){
returnNULL;
}
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&old_value);
assert(ix>=0);
}
hashpos=lookdict_index(mp->ma_keys,hash,ix);
assert(hashpos>=0);
assert(old_value!=NULL);
mp->ma_used--;
mp->ma_version_tag=DICT_NEXT_VERSION();
dictkeys_set_index(mp->ma_keys,hashpos,DKIX_DUMMY);
ep=&DK_ENTRIES(mp->ma_keys)[ix];
ENSURE_ALLOWS_DELETIONS(mp);
old_key=ep->me_key;
ep->me_key=NULL;
ep->me_value=NULL;
Py_DECREF(old_key);
ASSERT_CONSISTENT(mp);
returnold_value;
}
三、随机删除一个元素popitem()
stu_info={"xiedi":28,"liuhailin":27,"daiqiao":30,"hanwenhai":25,"chenqun":38}
print(stu_info)
stu_info.popitem()
print(stu_info)
输出结果:
{'xiedi':28,'liuhailin':27,'daiqiao':30,'hanwenhai':25,'chenqun':38}
{'xiedi':28,'liuhailin':27,'daiqiao':30,'hanwenhai':25}
1、dict_popitem_impl
/*[clinicinput]
dict.popitem
Removeandreturna(key,value)pairasa2-tuple.
PairsarereturnedinLIFO(last-in,first-out)order.
RaisesKeyErrorifthedictisempty.
[clinicstartgeneratedcode]*/
staticPyObject*
dict_popitem_impl(PyDictObject*self)
/*[clinicendgeneratedcode:output=e65fcb04420d230dinput=1c38a49f21f64941]*/
{
Py_ssize_ti,j;
PyDictKeyEntry*ep0,*ep;
PyObject*res;
/*Allocatetheresulttuplebeforecheckingthesize.Believeit
*ornot,thisallocationcouldtriggeragarbagecollectionwhich
*couldemptythedict,soifwecheckedthesizefirstandthat
*happened,theresultwouldbeaninfiniteloop(searchingforan
*entrythatnolongerexists).Notethattheusualpopitem()
*idiomis"whiled:k,v=d.popitem()".soneedingtothrowthe
*tupleawayifthedict*is*emptyisn'tasignificant
*inefficiency--possible,butunlikelyinpractice.
*/
res=PyTuple_New(2);
if(res==NULL)
returnNULL;
if(self->ma_used==0){
Py_DECREF(res);
PyErr_SetString(PyExc_KeyError,"popitem():dictionaryisempty");
returnNULL;
}
/*Convertsplittabletocombinedtable*/
if(self->ma_keys->dk_lookup==lookdict_split){
if(dictresize(self,DK_SIZE(self->ma_keys))){
Py_DECREF(res);
returnNULL;
}
}
ENSURE_ALLOWS_DELETIONS(self);
/*Poplastitem*/
ep0=DK_ENTRIES(self->ma_keys);
i=self->ma_keys->dk_nentries-1;
while(i>=0&&ep0[i].me_value==NULL){
i--;
}
assert(i>=0);
ep=&ep0[i];
j=lookdict_index(self->ma_keys,ep->me_hash,i);
assert(j>=0);
assert(dictkeys_get_index(self->ma_keys,j)==i);
dictkeys_set_index(self->ma_keys,j,DKIX_DUMMY);
PyTuple_SET_ITEM(res,0,ep->me_key);
PyTuple_SET_ITEM(res,1,ep->me_value);
ep->me_key=NULL;
ep->me_value=NULL;
/*Wecan'tdk_usable++sincethereisDKIX_DUMMYinindices*/
self->ma_keys->dk_nentries=i;
self->ma_used--;
self->ma_version_tag=DICT_NEXT_VERSION();
ASSERT_CONSISTENT(self);
returnres;
}
四、查找(key值在字典中存在)
1、dict_keys
staticPyObject*
dict_keys(PyDictObject*mp)
{
PyObject*v;
Py_ssize_ti,j;
PyDictKeyEntry*ep;
Py_ssize_tn,offset;
PyObject**value_ptr;
again:
n=mp->ma_used;
v=PyList_New(n);
if(v==NULL)
returnNULL;
if(n!=mp->ma_used){
/*Durnit.Theallocationscausedthedicttoresize.
*Juststartover,thisshouldn'tnormallyhappen.
*/
Py_DECREF(v);
gotoagain;
}
ep=DK_ENTRIES(mp->ma_keys);
if(mp->ma_values){
value_ptr=mp->ma_values;
offset=sizeof(PyObject*);
}
else{
value_ptr=&ep[0].me_value;
offset=sizeof(PyDictKeyEntry);
}
for(i=0,j=0;j
2、PyDict_Keys
PyObject*
PyDict_Keys(PyObject*mp)
{
if(mp==NULL||!PyDict_Check(mp)){
PyErr_BadInternalCall();
returnNULL;
}
returndict_keys((PyDictObject*)mp);
}
PyObject*
PyDict_Values(PyObject*mp)
{
if(mp==NULL||!PyDict_Check(mp)){
PyErr_BadInternalCall();
returnNULL;
}
returndict_values((PyDictObject*)mp);
}
五、get(k)
1、dict_get_impl
staticPyObject*
dict_get_impl(PyDictObject*self,PyObject*key,PyObject*default_value)
/*[clinicendgeneratedcode:output=bba707729dee05bfinput=279ddb5790b6b107]*/
{
PyObject*val=NULL;
Py_hash_thash;
Py_ssize_tix;
if(!PyUnicode_CheckExact(key)||
(hash=((PyASCIIObject*)key)->hash)==-1){
hash=PyObject_Hash(key);
if(hash==-1)
returnNULL;
}
ix=(self->ma_keys->dk_lookup)(self,key,hash,&val);
if(ix==DKIX_ERROR)
returnNULL;
if(ix==DKIX_EMPTY||val==NULL){
val=default_value;
}
Py_INCREF(val);
returnval;
}
2、_PyDict_GetItem_KnownHash
/*SameasPyDict_GetItemWithError()butwithhashsuppliedbycaller.
ThisreturnsNULL*with*anexceptionsetifanexceptionoccurred.
ItreturnsNULL*without*anexceptionsetifthekeywasn'tpresent.
*/
PyObject*
_PyDict_GetItem_KnownHash(PyObject*op,PyObject*key,Py_hash_thash)
{
Py_ssize_tix;
PyDictObject*mp=(PyDictObject*)op;
PyObject*value;
if(!PyDict_Check(op)){
PyErr_BadInternalCall();
returnNULL;
}
ix=(mp->ma_keys->dk_lookup)(mp,key,hash,&value);
if(ix<0){
returnNULL;
}
returnvalue;
}
3、_PyDict_GetItemId
PyObject*
_PyDict_GetItemId(PyObject*dp,struct_Py_Identifier*key)
{
PyObject*kv;
kv=_PyUnicode_FromId(key);/*borrowed*/
if(kv==NULL){
PyErr_Clear();
returnNULL;
}
returnPyDict_GetItem(dp,kv);
}
/*Forbackwardcompatibilitywitholddictionaryinterface*/
4、PyDict_GetItemString
PyObject*
PyDict_GetItemString(PyObject*v,constchar*key)
{
PyObject*kv,*rv;
kv=PyUnicode_FromString(key);
if(kv==NULL){
PyErr_Clear();
returnNULL;
}
rv=PyDict_GetItem(v,kv);
Py_DECREF(kv);
returnrv;
}
int
_PyDict_SetItemId(PyObject*v,struct_Py_Identifier*key,PyObject*item)
{
PyObject*kv;
kv=_PyUnicode_FromId(key);/*borrowed*/
if(kv==NULL)
return-1;
returnPyDict_SetItem(v,kv,item);
}
int
PyDict_SetItemString(PyObject*v,constchar*key,PyObject*item)
{
PyObject*kv;
interr;
kv=PyUnicode_FromString(key);
if(kv==NULL)
return-1;
PyUnicode_InternInPlace(&kv);/*XXXShouldwereally?*/
err=PyDict_SetItem(v,kv,item);
Py_DECREF(kv);
returnerr;
}
六、setdefault(k,v)
setdefault()表示去取字典中的key,如果取不到,则设置新值,相反如果取到,则返回原有默认值
1、dict_setdefault_impl
/*[clinicinput]
dict.setdefault
key:object
default:object=None
/
Insertkeywithavalueofdefaultifkeyisnotinthedictionary.
Returnthevalueforkeyifkeyisinthedictionary,elsedefault.
[clinicstartgeneratedcode]*/
staticPyObject*
dict_setdefault_impl(PyDictObject*self,PyObject*key,
PyObject*default_value)
/*[clinicendgeneratedcode:output=f8c1101ebf69e220input=0f063756e815fd9d]*/
{
PyObject*val;
val=PyDict_SetDefault((PyObject*)self,key,default_value);
Py_XINCREF(val);
returnval;
}
staticPyObject*
dict_clear(PyDictObject*mp,PyObject*Py_UNUSED(ignored))
{
PyDict_Clear((PyObject*)mp);
Py_RETURN_NONE;
}
/*[clinicinput]
dict.pop
key:object
default:object=NULL
/
2、PyDict_SetDefault
PyObject*
PyDict_SetDefault(PyObject*d,PyObject*key,PyObject*defaultobj)
{
PyDictObject*mp=(PyDictObject*)d;
PyObject*value;
Py_hash_thash;
if(!PyDict_Check(d)){
PyErr_BadInternalCall();
returnNULL;
}
if(!PyUnicode_CheckExact(key)||
(hash=((PyASCIIObject*)key)->hash)==-1){
hash=PyObject_Hash(key);
if(hash==-1)
returnNULL;
}
if(mp->ma_keys==Py_EMPTY_KEYS){
if(insert_to_emptydict(mp,key,hash,defaultobj)<0){
returnNULL;
}
returndefaultobj;
}
if(mp->ma_values!=NULL&&!PyUnicode_CheckExact(key)){
if(insertion_resize(mp)<0)
returnNULL;
}
Py_ssize_tix=(mp->ma_keys->dk_lookup)(mp,key,hash,&value);
if(ix==DKIX_ERROR)
returnNULL;
if(_PyDict_HasSplitTable(mp)&&
((ix>=0&&value==NULL&&mp->ma_used!=ix)||
(ix==DKIX_EMPTY&&mp->ma_used!=mp->ma_keys->dk_nentries))){
if(insertion_resize(mp)<0){
returnNULL;
}
ix=DKIX_EMPTY;
}
if(ix==DKIX_EMPTY){
PyDictKeyEntry*ep,*ep0;
value=defaultobj;
if(mp->ma_keys->dk_usable<=0){
if(insertion_resize(mp)<0){
returnNULL;
}
}
Py_ssize_thashpos=find_empty_slot(mp->ma_keys,hash);
ep0=DK_ENTRIES(mp->ma_keys);
ep=&ep0[mp->ma_keys->dk_nentries];
dictkeys_set_index(mp->ma_keys,hashpos,mp->ma_keys->dk_nentries);
Py_INCREF(key);
Py_INCREF(value);
MAINTAIN_TRACKING(mp,key,value);
ep->me_key=key;
ep->me_hash=hash;
if(_PyDict_HasSplitTable(mp)){
assert(mp->ma_values[mp->ma_keys->dk_nentries]==NULL);
mp->ma_values[mp->ma_keys->dk_nentries]=value;
}
else{
ep->me_value=value;
}
mp->ma_used++;
mp->ma_version_tag=DICT_NEXT_VERSION();
mp->ma_keys->dk_usable--;
mp->ma_keys->dk_nentries++;
assert(mp->ma_keys->dk_usable>=0);
}
elseif(value==NULL){
value=defaultobj;
assert(_PyDict_HasSplitTable(mp));
assert(ix==mp->ma_used);
Py_INCREF(value);
MAINTAIN_TRACKING(mp,key,value);
mp->ma_values[ix]=value;
mp->ma_used++;
mp->ma_version_tag=DICT_NEXT_VERSION();
}
ASSERT_CONSISTENT(mp);
returnvalue;
}
七、update(dict)
update()是把两个字典合并成一个新的字典,中间有交叉的key,更新替换成新值,没有交叉就直接创建
1、dict_update_common
staticint
dict_update_common(PyObject*self,PyObject*args,PyObject*kwds,
constchar*methname)
{
PyObject*arg=NULL;
intresult=0;
if(!PyArg_UnpackTuple(args,methname,0,1,&arg)){
result=-1;
}
elseif(arg!=NULL){
if(PyDict_CheckExact(arg)){
result=PyDict_Merge(self,arg,1);
}
else{
_Py_IDENTIFIER(keys);
PyObject*func;
if(_PyObject_LookupAttrId(arg,&PyId_keys,&func)<0){
result=-1;
}
elseif(func!=NULL){
Py_DECREF(func);
result=PyDict_Merge(self,arg,1);
}
else{
result=PyDict_MergeFromSeq2(self,arg,1);
}
}
}
if(result==0&&kwds!=NULL){
if(PyArg_ValidateKeywordArguments(kwds))
result=PyDict_Merge(self,kwds,1);
else
result=-1;
}
returnresult;
}
2、dict_update
staticPyObject*
dict_update(PyObject*self,PyObject*args,PyObject*kwds)
{
if(dict_update_common(self,args,kwds,"update")!=-1)
Py_RETURN_NONE;
returnNULL;
}
/*Updateunconditionallyreplacesexistingitems.
Mergehasa3rdargument'override';ifset,itactslikeUpdate,
otherwiseitleavesexistingitemsunchanged.
PyDict_{Update,Merge}update/mergefromamappingobject.
PyDict_MergeFromSeq2updates/mergesfromanyiterableobject
producingiterableobjectsoflength2.
*/
3、PyDict_Update
int
PyDict_Update(PyObject*a,PyObject*b)
{
returndict_merge(a,b,1);
}
八、items()将字典转换为列表
1、PyDict_Items
PyObject*
PyDict_Items(PyObject*mp)
{
if(mp==NULL||!PyDict_Check(mp)){
PyErr_BadInternalCall();
returnNULL;
}
returndict_items((PyDictObject*)mp);
}
/*Return1ifdictsequal,0ifnot,-1iferror.
*Getsoutassoonasanydifferenceisdetected.
*UsesonlyPy_EQcomparison.
*/
九、fromkeys(list,默认值)
1、_PyDict_FromKeys
/*Internalversionofdict.from_keys().Itissubclass-friendly.*/
PyObject*
_PyDict_FromKeys(PyObject*cls,PyObject*iterable,PyObject*value)
{
PyObject*it;/*iter(iterable)*/
PyObject*key;
PyObject*d;
intstatus;
d=_PyObject_CallNoArg(cls);
if(d==NULL)
returnNULL;
if(PyDict_CheckExact(d)&&((PyDictObject*)d)->ma_used==0){
if(PyDict_CheckExact(iterable)){
PyDictObject*mp=(PyDictObject*)d;
PyObject*oldvalue;
Py_ssize_tpos=0;
PyObject*key;
Py_hash_thash;
if(dictresize(mp,ESTIMATE_SIZE(PyDict_GET_SIZE(iterable)))){
Py_DECREF(d);
returnNULL;
}
while(_PyDict_Next(iterable,&pos,&key,&oldvalue,&hash)){
if(insertdict(mp,key,hash,value)){
Py_DECREF(d);
returnNULL;
}
}
returnd;
}
if(PyAnySet_CheckExact(iterable)){
PyDictObject*mp=(PyDictObject*)d;
Py_ssize_tpos=0;
PyObject*key;
Py_hash_thash;
if(dictresize(mp,ESTIMATE_SIZE(PySet_GET_SIZE(iterable)))){
Py_DECREF(d);
returnNULL;
}
while(_PySet_NextEntry(iterable,&pos,&key,&hash)){
if(insertdict(mp,key,hash,value)){
Py_DECREF(d);
returnNULL;
}
}
returnd;
}
}
it=PyObject_GetIter(iterable);
if(it==NULL){
Py_DECREF(d);
returnNULL;
}
if(PyDict_CheckExact(d)){
while((key=PyIter_Next(it))!=NULL){
status=PyDict_SetItem(d,key,value);
Py_DECREF(key);
if(status<0)
gotoFail;
}
}else{
while((key=PyIter_Next(it))!=NULL){
status=PyObject_SetItem(d,key,value);
Py_DECREF(key);
if(status<0)
gotoFail;
}
}
if(PyErr_Occurred())
gotoFail;
Py_DECREF(it);
returnd;
Fail:
Py_DECREF(it);
Py_DECREF(d);
returnNULL;
}
2、dict_fromkeys_impl
staticPyObject*
dict_fromkeys_impl(PyTypeObject*type,PyObject*iterable,PyObject*value)
/*[clinicendgeneratedcode:output=8fb98e4b10384999input=382ba4855d0f74c3]*/
{
return_PyDict_FromKeys((PyObject*)type,iterable,value);
}
staticint
dict_update_common(PyObject*self,PyObject*args,PyObject*kwds,
constchar*methname)
{
PyObject*arg=NULL;
intresult=0;
if(!PyArg_UnpackTuple(args,methname,0,1,&arg)){
result=-1;
}
elseif(arg!=NULL){
if(PyDict_CheckExact(arg)){
result=PyDict_Merge(self,arg,1);
}
else{
_Py_IDENTIFIER(keys);
PyObject*func;
if(_PyObject_LookupAttrId(arg,&PyId_keys,&func)<0){
result=-1;
}
elseif(func!=NULL){
Py_DECREF(func);
result=PyDict_Merge(self,arg,1);
}
else{
result=PyDict_MergeFromSeq2(self,arg,1);
}
}
}
if(result==0&&kwds!=NULL){
if(PyArg_ValidateKeywordArguments(kwds))
result=PyDict_Merge(self,kwds,1);
else
result=-1;
}
returnresult;
}
/*Note:dict.update()usestheMETH_VARARGS|METH_KEYWORDScallingconvention.
UsingMETH_FASTCALL|METH_KEYWORDSwouldmakedict.update(**dict2)calls
slower,seetheissue#29312.*/
十、Clea清空字典
1、PyDict_ClearFreeList
int
PyDict_ClearFreeList(void)
{
PyDictObject*op;
intret=numfree+numfreekeys;
while(numfree){
op=free_list[--numfree];
assert(PyDict_CheckExact(op));
PyObject_GC_Del(op);
}
while(numfreekeys){
PyObject_FREE(keys_free_list[--numfreekeys]);
}
returnret;
}
2、PyDict_Clea
void
PyDict_Clear(PyObject*op)
{
PyDictObject*mp;
PyDictKeysObject*oldkeys;
PyObject**oldvalues;
Py_ssize_ti,n;
if(!PyDict_Check(op))
return;
mp=((PyDictObject*)op);
oldkeys=mp->ma_keys;
oldvalues=mp->ma_values;
if(oldvalues==empty_values)
return;
/*Emptythedict...*/
dictkeys_incref(Py_EMPTY_KEYS);
mp->ma_keys=Py_EMPTY_KEYS;
mp->ma_values=empty_values;
mp->ma_used=0;
mp->ma_version_tag=DICT_NEXT_VERSION();
/*...thenclearthekeysandvalues*/
if(oldvalues!=NULL){
n=oldkeys->dk_nentries;
for(i=0;idk_refcnt==1);
dictkeys_decref(oldkeys);
}
ASSERT_CONSISTENT(mp);
}
3、dict_clear
staticPyObject*
dict_clear(PyDictObject*mp,PyObject*Py_UNUSED(ignored))
{
PyDict_Clear((PyObject*)mp);
Py_RETURN_NONE;
}
4、dict_tp_clear
staticint
dict_tp_clear(PyObject*op)
{
PyDict_Clear(op);
return0;
}
更多关于Python字典添加,删除,查询等相关操作方法的文章请查看下面的相关链接
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。