【问题标题】:Adding entries to list in dictionary将条目添加到字典中的列表
【发布时间】:2016-08-14 09:42:54
【问题描述】:

我有以下问题: 假设我有这样的数据结构

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

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

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

感谢任何帮助!

【问题讨论】:

  • 您尝试使用shelfFile['Test']['January'].append("Test3") 吗?因为它对我有用...

标签: python list dictionary append shelve


【解决方案1】:

根据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

【讨论】:

    猜你喜欢
    • 2013-02-06
    • 1970-01-01
    • 2018-08-27
    • 2020-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-21
    • 1970-01-01
    相关资源
    最近更新 更多