【问题标题】:Python Shelve changing value of element of a dictionaryPython Shelve 改变字典元素的值
【发布时间】:2018-01-31 05:18:41
【问题描述】:

这个让我很难过,所以我想我会挑战其他人。 我正在尝试更改搁置中字典的一个元素,但它很顽固。

这是一个演示:

db = shelve.open('/tmp/somefile','c')
db['bob'] = {'shoesize':42, 'gender':'m'}
db['bob']
{'shoesize': 42, 'gender': 'm'}
db['bob']['gender'] = 'u'
db['bob']
{'shoesize': 42, 'gender': 'm'}
db['bob'] = {'shoesize': 42, 'gender': 'u'}
db['bob']
{'shoesize': 42, 'gender': 'u'}

这发生在 RHEL 7 主机上的 Python 3.6.1 上。 从早期的 RHEL 和 Python 2 升级后,我知道底层库与货架的功能有更多关系,但这有点奇怪。

向“鲍勃”致歉

【问题讨论】:

  • 什么是db?..

标签: python dictionary shelve


【解决方案1】:

来自 Python docsshelf

由于 Python 语义,架子无法知道可变的持久字典条目何时被修改。默认情况下,修改后的对象仅在分配到架子时才写入

您的第一次尝试 db['bob']['gender'] = 'u' 不起作用,因为它不是对书架本身的分配(它是对 dict db['bob']['gender'] 的分配)。您的第二次尝试确实有效,因为它分配给了书架本身的一个键。文档中的examples 将进一步强调这一点。

如果您使用writeback=True 打开,您将能够正常编码。但是,正如文档所指出的,“它还会消耗更多内存并使 d.close() 操作变慢。”

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    • 1970-01-01
    • 2011-08-13
    • 1970-01-01
    相关资源
    最近更新 更多