我对以下内容有疑问: 假设我有一个像这样的数据结构
shelfFile['Test']
这是搁置文件中的字典。
我使用shelfFile['Test'] = {"January":["Test1","Test2"]}
为其添加了一些值
现在,当我想使用shelfFile['Test']['January'].append()
添加Test3时,它不起作用,它只返回原始值“Test1”和“Test2”。我也尝试过使用
shelfFile['test'].setdefault('January', []).append('Test3')
但这不起作用,这是由于字典/元组的任何可变性吗?也许有人可以推荐一些更合适的替代数据结构? “测试”条目是永久性的,月份条目也是永久性的,尽管每个月都会添加一个新条目。可以随时添加或删除“Test1”,“Test2”。
感谢任何帮助!
答案 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