0

使用 plistlib 我可以将字典/列表结构序列化为 plist。这工作正常,我也可以用同一个库读回它。

问题是字典是“_internalDict”类型的,我似乎无法更改它们。例如,例如:

d = plistlib.readPlist('someplist.plist')
v = d['value'] # v is an _internalDict
v['val'] = 'new val' # works
del v # doesn't work
v = {'someotherkey': 'someothervalue'} # doesn't work either

plist 似乎没有改变。帮助?

4

1 回答 1

3

您需要从d字典中删除密钥:

del d['value']

通过设置v = d['value'],您只是创建了一个指向与 相同值的新变量d['value'],但删除v不会从父结构中删除 dict。

要完全替换 dict,您需要再次操作父 dict:

d['value'] = { 'foo': 'bar' }

如果你执行v = { ... }你正在做的事情就是为变量分配一个新dictv的引用,替换对d['value'] dict;的引用。你不是在操纵d字典中的原始值。

plistlib._InternalDict只是一个子类,dict它为属性访问提供警告,现在已弃用;否则它就像普通dict类型一样。

于 2012-06-12T15:11:27.530 回答