我使用 shapefile 在 networkx 中制作了一个图表:
import networkx as nx
layer = nx.read_shp(path)
G=layer.to_undirected()
操作其边缘属性后,我必须将结果保存在 shapefile 中,因此:
nx.write_shp(G,out_path)
问题是,这个新的 shapefile 将具有完全随机的属性顺序;可以理解,因为属性存储在字典中。我也无法用 OrderedDict 解决这个问题:
# Does NOT work
for edge in G.edges(data=True):
edge = list(edge)
edge[2] = OrderedDict(sorted(edge[2].items()))
edge=tuple(edge)
有没有办法对每条边的属性进行排序或更改顺序?
最佳答案
这个:
for edge in G.edges(data=True):
edge = list(edge)
edge[2] = OrderedDict(sorted(edge[2].items()))
edge=tuple(edge)
对输出(或G
指向的对象的内容)没有影响,因为这样做:
edge = tuple(edge)
您仅修改局部变量edge
;这不会影响 G.edges(data=True)
返回的值,更不会影响 G
的内部状态。这适用于任何(Python)程序,并且与networkx或您的程序没有任何关系。
因此,除非您编写自己的算法来序列化数据并将其转储到文件中,或者除非您可以告诉 networkx
它应如何序列化数据,否则无法更改文件内容。 ...除非我遗漏了一些东西,但根据 http://networkx.lanl.gov/reference/readwrite.nx_shp.html , write_shp
无法按照您需要的方式进行配置。
关于python - 从 networkx 中的 shapefile 创建图形时如何保留或至少对边缘属性进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23330792/