2016-04-21 64 views
1

我有一個關於以下問題: 比方說,我有這樣的添加條目列出在字典

shelfFile['Test']這在貨架文件字典的數據結構。 我使用shelfFile['Test'] = {"January":["Test1","Test2"]} 給它添加了一些值現在,當我想使用shelfFile['Test']['January'].append()添加Test3時它不起作用,它只返回原始值「Test1」和「Test2」。我也試過使用

shelfFile['test'].setdefault('January', []).append('Test3') 

但這不起作用,這是由於字典/元組的任何可變性?也許有人可以推薦一些更適合的替代數據結構? 「測試」條目是永久性的,月份條目也是永久性的,儘管每個月都會添加一個新條目。 「Test1」,「Test2」可隨時添加或刪除。

任何幫助表示讚賞!

+0

您嘗試使用'shelfFile [ '測試'] [ '月']。追加( 「Test3的」)'?因爲它適合我... – Aurel

回答

2

shelve module documentation

因爲Python的語義,當可變 持久字典項被修改的架子不知道。 默認情況下,修改對象 僅在分配給貨架(參見Example)時才寫入。如果 可選寫回參數設置爲True,則所有訪問的條目都是 也緩存在內存中,並寫回到sync()和close();這個 可以更容易地修改持久性 字典中的可變條目,但是如果訪問了很多條目,它可能會佔用緩存的大量內存,並且它可以使關閉操作 非常慢,因爲所有訪問的條目( 無法確定哪些訪問的條目是可變的,哪些是實際變異的 )。

d = shelfFile['Test']   # extract a copy 
d['January'].append('Test3') # mutate 
shelfFile['Test'] = d   # stores the copy right back, to persist it