泡菜不能腌制一个命名元组

问题描述 投票:0回答:1

我想像这样腌制namedtuple

def f():
    TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
    f1 = np.random.randn(50,50)
    f2 = np.random.randn(50,50)
    td = TemplateData(f1, f2)
    return td

data = f()
with open("aaaa.pkl", "wb") as fl:
    pkl.dump(data, fl)

但由于错误导致此崩溃:

PicklingError: Can't pickle <class '__main__.TemplateData'>: it's not the same object as __main__.TemplateData

怎么了?如果pickle不是存储命名元组的最佳方式 - 最有效的方法是什么?

python pickle namedtuple
1个回答
4
投票

您需要在函数外部定义namedtuple,并将namedtuple的名称更改为TemplateData

TemplateData = namedtuple('TemplateData', ['field1', 'field2'])
f1 = np.random.randn(50,50)
f2 = np.random.randn(50,50)
model_cluster = TemplateData(f1, f2)

with open("aaaa.pkl", "wb") as fl:
    pkl.dump(model_clusters_dict, fl)
© www.soinside.com 2019 - 2024. All rights reserved.