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

ddictからキーを削除する必要があります。

del d['value']

設定することによりv = d['value']、と同じ値を指す新しい変数のみを作成しますが、削除しても親構造からdictはd['value']削除されません。v

dictを完全に置き換えるには、親dictを操作する必要があります。

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

実行していることを実行する場合は、変数への新しい値へのv = { ... }参照を割り当て、 ;への参照を置き換えます。dictの元の値を操作していません。dictvd['value'] dictd

plistlib._InternalDictdictこれは、属性アクセスの警告を出すサブクラスであり、現在は非推奨になっています。dictそれ以外は、通常のタイプと同じように機能します。

于 2012-06-12T15:11:27.530 に答える