在Python中挑选类实例的字典

时间:2015-10-08 02:00:54

标签: python class dictionary machine-learning pickle

我如何if ($(evt.target).attr('class') == 'exampleClass') 在一个文件(Python文件1)中包含类实例的字典对象和另一个文件中的pickle(Python文件2)?

我有一个由几个文件组成的巨大复杂数据集,我创建了一个类来存储我的所有属性。我制作了一个字典来存储所有的样本和属性。 key = sample,value =包含atributes的类的实例。示例如下:

pickle.load

我需要很长时间才能使用我的真实数据集进行此操作,我尝试使用#Python File 1 import random class Storage: def __init__(self,label,x,y): self.label = label; self.x = x; self.y = y def get_x(self): return(self.x) def get_y(self): return(self.y) D_var_instance = {} L = ["A","B","C"] for var in L: D_var_instance[var] = Storage(label=var,x=random.random(),y=random.random()) print(D_var_instance["A"]) #<__main__.Storage instance at 0x102811128> print(D_var_instance["A"].get_x()) #0.193517721574 pickle字典对象,但它不起作用:

pickle.dump

我尝试使用以下代码加载另一个Python文件:

#Python File 1
import pickle
pickle.dump(D_var_instance,open("/path/to/dump.txt","w"))
pickle.dump(Storage, open("/path/to/storagedump.txt","w"))

出现此错误:

#Python File 2
import pickle
Storage = pickle.load(open("/path/to/storagedump.txt","r"))
D_var_instance = pickle.load(open("/path/to/dump.txt","r"))

1 个答案:

答案 0 :(得分:1)

这里的问题可以通过这个SO帖子here

来完美解释

最终,这里发生的事情是,当你腌制你的实例时,你必须能够适当地引用你的模块来腌制它。

所以,要显示一些代码来说明这一点。你可以这样做(解释如下):

storage.py

class Storage(object):
    pass

foo.py

import pickle
from storage import Storage

D_var_instance = {}
L = ["A","B","C"]

for var in L: 
    D_var_instance[var] = Storage(label=var,x=random.random(),y=random.random())

pickle.dump(D_var_instance, open("/path/pickle.txt", "wb"))

boo.py

D_var_instance = pickle.load(open("/path/pickle.txt", "rb"))

所以,当你从foo编写你的pickle时,你的引用现在是storage.Storage。当你进入一个完全不同的模块(boo.py)并尝试unpickle时,这里发生的事情是你试图加载一些参考模块的东西,这个模块不能从你从哪里开始工作。

现在可以用不同的方式解决这个问题。由于我将所有内容组织在同一级别,因此您实际上不需要导入任何内容,它应该可以工作!

但是,如果你碰巧在同一模块中写了你的课程和泡菜写作,那么你必须在boo.py

中导入包含该代码的模块。

我建议你查看我链接的SO帖子中提供的两个选项,看看哪一个满足你。但这应该是你的解决方案。

从iPython运行此脚本会产生:

ipython boo.py
{'A': <storage.Storage instance at 0x1107b77e8>, 'C': <storage.Storage instance at 0x1107b7680>, 'B': <storage.Storage instance at 0x1107b7908>}