2010-08-04 74 views
0

在本例中,我有一本词典,当我打电话时,会显示“Ember Attack”。使用Python中的类词典

#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而不是普通的字典。它可能与内存范围有关。无论如何,有人可以帮我修改我的代码,以便它可以在货架上工作吗?谢谢!

+0

“工作”是什么意思?你能提供一些关于你希望看到什么发生以及没有发生什么的暗示吗? – 2010-08-04 22:46:24

+0

使用货架方法,我希望能够调用dict1 [“Charmander”]。var1并返回“Ember Attack”。当我现在这样做时,只返回一个空的'[]'。 – Brian 2010-08-04 23:05:30

回答

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

你还可以指定这应该提高性能

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

因为Python的语义,架子当可变 持久字典条目是 修改 无法知道协议。默认情况下修改对象 仅在分配给 架子时才写入(请参阅示例)。如果可选的 回写参数设置为True,则所有访问的条目在内存中也被缓存 ,并在同步() 和close();上写回。这可以使它更加便利 突变在 持续字典可变的条目,但是,如果许多 条目被访问时,它可以消耗 大量的内存缓存, 它可以使关闭操作 因为所有的速度很慢被访问的条目 被写回(无法确定哪些访问的条目是可变的,哪一个实际上是 变异)。

+1

你的第二行代码有效!非常感谢!!!!!!!!! – Brian 2010-08-04 23:09:44