python - 从 networkx 中的 shapefile 创建图形时如何保留或至少对边缘属性进行排序?

标签 python networkx shapefile

我使用 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/

相关文章:

python - 在 django 中获取用户配置文件

r - 合并两个邻国的SpatialPolygonsDataFrame

python - 如何将脚本作为pytest测试运行

python - django动态 zipper 内部服务器错误

python - 巴特沃斯滤波器 - 输出 x (-1)?

python - NetworkX:从节点属性向图中添加边

python-3.x - Networkx 2.1+中修改单个节点属性的简单方法

python - 将 python-igraph 图转换为 networkx

mysql - 查询MySQL Geometry数据类型列中的数据

r - 使用 rgdal 在 R 中打开 shapefile 总是比使用 maptools 更好吗?