【问题标题】:Working on Dictionary of Classes in Python在 Python 中处理类字典
【发布时间】:2010-08-04 22:42:49
【问题描述】:

对于这个例子,我有一个字典,当我调用它时,会显示“Ember Attack”。

#import shelve
class Pokemon():
"""Each pokemon's attributes"""

def __init__(self):
    self.id=[]
    self.var1=[]
    self.var2=[]
    self.var3=[]
    self.var4=[]
    self.var5=[]

def __str__(self):
     showList=['id','var1', 'var2', 'var3', 'var4', 'var5']

#dict1=shelve.open("shelve.dat")
dict1={}
dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"
#dict1.sync()
print dict1["Charmander"].var1
#dict1.close()

但是,当我开始使用书架而不是字典时,调用 var1 时出现空白。

import shelve

class Pokemon():
"""Each patient's attributes"""

def __init__(self):
    self.id=[]
    self.var1=[]
    self.var2=[]
    self.var3=[]
    self.var4=[]
    self.var5=[]

def __str__(self):
    showList=['id','var1', 'var2', 'var3', 'var4', 'var5']

dict1=shelve.open("shelve.dat")
#dict1={}

dict1["Charmander"]=Pokemon()
dict1["Charmander"].var1="Ember Attack"

dict1.sync()

print dict1["Charmander"].var1

dict1.close()

唯一的区别是我把 dict1 做成了一个搁置的字典,而不是一个普通的字典。它可能与内存范围或其他东西有关。无论如何,有人可以帮我修改我的代码,使其适用于书架吗?谢谢!

【问题讨论】:

  • “工作”是什么意思?你能提供一些关于你希望看到什么发生和没有发生什么的提示吗?
  • 使用shelf 方法,我希望能够调用dict1["Charmander"].var1 并返回"Ember Attack"。当我现在这样做时,只返回一个空的[]

标签: python dictionary shelve


【解决方案1】:
dict1=shelve.open("shelve.dat", writeback=True)

您还可以指定应该提高性能的协议

dict1=shelve.open("shelve.dat", protocol=2, writeback=True)

由于 Python 语义,一个架子 不知道什么时候是可变的 持久字典条目是 修改的。默认情况下修改的对象 仅在分配给 架子(见示例)。如果可选 writeback 参数设置为 True, 所有访问的条目也被缓存 在内存中,并在 sync() 上写回 和关闭();这可以使它更方便 改变可变条目 持久字典,但是,如果很多 条目被访问,它可以消耗 用于缓存的大量内存, 并且可以进行关闭操作 非常慢,因为所有访问的条目 被写回(没有办法 确定哪些访问的条目是 可变的,也不是哪些实际上是 变异)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-25
    • 2023-03-22
    • 1970-01-01
    • 2023-02-16
    • 2016-05-10
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多