使用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似乎没有变化。帮助
答案 0 :(得分:3)
您需要从d
词典中删除密钥:
del d['value']
通过设置v = d['value']
,您只创建一个与d['value']
指向相同值的新变量,但删除v
不会从父结构中删除该字典。
要完全替换dict,您需要再次操作父dict:
d['value'] = { 'foo': 'bar' }
如果执行v = { ... }
您正在做的是将新dict
值的引用分配给变量v
,请将引用替换为d['value']
{{1 }};你没有操纵dict
字典中的原始值。
d
只是plistlib._InternalDict
的一个子类,它为属性访问提供警告,现在已弃用;否则它就像常规dict
类型一样。