首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >嵌套字典中的setdefault()?

嵌套字典中的setdefault()?
EN

Stack Overflow用户
提问于 2017-05-24 09:53:38
回答 1查看 2.5K关注 0票数 0

尝试将这些值存储在带有setdefult()的搁置文件中的嵌套字典中。有什么简单的方法吗?下面的代码似乎使值不可变,例如,最后一行无法将“price”值更改为25。

代码语言:javascript
复制
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,但现在可能更容易了解它。让我知道你的想法。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-05-24 10:31:58

你必须设置writeback=True

代码语言:javascript
复制
room_data = shelve.open("data", writeback=True)

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

代码语言:javascript
复制
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();这可以使它更容易在持久字典中更改可变条目,但是,如果访问了许多条目,它可以为缓存消耗大量内存,而且由于所有访问的条目都会被写回(无法确定哪些访问的条目是可变的,哪些实际上是可变的),所以它可以使关闭操作变得非常慢。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44154932

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档