嵌套字典中的setdefault()?

时间:2017-05-24 09:53:39

标签: python dictionary nested shelve setdefault

尝试使用setdefult()将嵌套字典中的值存储在搁置文件中。有没有简单的方法来做到这一点?以下代码似乎使值不可变,例如,最后一行无法更改'价格'值为25.

room_data = shelve.open("data")

room_data.setdefault("key", {"type": "Standard Single", "available": 5, "price": 50, "adults": 1, "children": 0})

room_data["key"]["price"] = 25

我希望能让它在搁置中运行,然后再添加SQL,但现在可能更容易学习。让我知道你的想法。谢谢。

1 个答案:

答案 0 :(得分:0)

您必须设置writeback=True

room_data = shelve.open("data", writeback=True)

然后在改变值后调用room_data.sync()

room_data.setdefault("key", {"type": "Standard Single", "available": 5, "price": 50, "adults": 1, "children": 0})

room_data["key"]["price"] = 25

room_data.sync()

否则设置该值但设置值不能变异。

关于shelve.open的说明:

  

由于Python语义,架子无法知道何时修改了可变的持久字典条目。默认情况下,只有在分配给工具架时才会编写修改的对象(请参见示例)。如果可选的writeback参数设置为True,则所有访问的条目也会缓存在内存中,并写回sync()close();这可以使持久化字典中的可变条目变得更容易,但是,如果访问了许多条目,它可能会占用大量的内存用于缓存,并且它可以使关闭操作非常慢,因为所有访问的条目都被写回(没有办法确定哪些访问的条目是可变的,哪些实际上是变异的。)