如何保存'pos dictionary'类型的对象? (网络X)

How to save a 'pos dictionary' type of object? (NetworkX)

我正在使用networkx as nx。创建图形对象(G)后,我使用 data = nx.spring_layout(G) 方法生成字典(pos)。生成这个 pos 对象非常耗时,我想将它保存为一个文件,这样我就不必在每次要使用这个数据集时都重新 运行 了。 这是目前的样子:

G = nx.Graph()
G.add_edges_from(tuples)
data = nx.spring_layout(G)

如果我运行 type(data),我收到'dict'。如果我 运行 输入 (G),我会收到 'networkx.classes.graph.Graph'.

因为它是一个'dict'对象,以下是我在网上找到的一些我试过但没有用的解决方案:

1.将其另存为 .csv 文件

import csv

w = csv.writer(open("output.csv", "w"))

for key, val in data.items():
    w.writerow([key, val])

2。另存为 JSON 文件

import json
json = json.dumps(data)


f = open("data.json","w")

f.write(json)

f.close()

3。另存为 .txt 文件

f = open("data.txt","w")

f.write( str(data) )

f.close()

希望我说清楚了 (i) 我不知道哪种类型的文件最适合保存此类对象; (ii) 我不知道如何以任何方式保存它; (iii) 当然,我不知道如何将这个文件正确加载为 'pos dict' 对象,一旦它保存在我的目录中。

供参考,nx.spring_layout(G) returns: "pos: 字典 由节点键入的位置字典。”,如 documentation.

中所述

可能存储 python 对象供以后使用的最简单方法是使用 pickle 模块:

import pickle

# save data
with open('positions.pickle', 'wb') as f:
    pickle.dump(data, f)

# load data
with open('positions.pickle', 'rb') as f:
    data = pickle.load(f)