2016-04-21 52 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