我已经使用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
它无法按照您需要的方式进行配置。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句