如何在使用networkx从shapefile创建图时保留或至少排序边属性?
我用networkx从一个shapefile创建了一个图,代码是:
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)
有没有办法对每条边的属性进行排序或者改变顺序呢?
1 个回答
1
这个:
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
并不能以你需要的方式进行配置。