将条目添加到字典中的列表

时间:2016-04-21 09:27:35

标签: python list dictionary append shelve

我对以下内容有疑问: 假设我有一个像这样的数据结构

shelfFile['Test']这是搁置文件中的字典。 我使用shelfFile['Test'] = {"January":["Test1","Test2"]}为其添加了一些值 现在,当我想使用shelfFile['Test']['January'].append()添加Test3时,它不起作用,它只返回原始值“Test1”和“Test2”。我也尝试过使用

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

但这不起作用,这是由于字典/元组的任何可变性吗?也许有人可以推荐一些更合适的替代数据结构? “测试”条目是永久性的,月份条目也是永久性的,尽管每个月都会添加一个新条目。可以随时添加或删除“Test1”,“Test2”。

感谢任何帮助!

1 个答案:

答案 0 :(得分:2)

根据shelve module documentation

  

由于Python语义,架子无法知道何时可变   持久字典条目被修改。 默认修改对象   仅在分配到书架时才会被写入(请参阅Example)。如果   可选的writeback参数设置为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