网络节点列表问题 - 一旦我添加另一个节点就列出更改

时间:2013-08-20 22:13:15

标签: python eclipse pydev networkx

我在二进制图开发过程中遇到了一些问题。

到目前为止,我的问题是一个不稳定的节点列表。一旦我添加节点,输出列表就会完全重新排序。

以下是我的输出。

以前有人遇到过这样的问题吗?

g.node.items()
[(8, {'location': 'root'}), (9, {'location': 'right'}), (5, {'location': 'left'}), (15, {'location': 'right'})]
g.add_node(12, location='left')
g.node.items()
[(8, {'location': 'root'}), (9, {'location': 'right'}), (12, {'location': 'left'}), (5, {'location': 'left'}), (15, {'location': 'right'})]
g.add_node(6, location='right')
g.node.items()
[(5, {'location': 'left'}), (6, {'location': 'right'}), (8, {'location': 'root'}), (9, {'location': 'right'}), (12, {'location': 'left'}), (15, {'location': 'right'})]

1 个答案:

答案 0 :(得分:1)

假设gnetworks.Graph或三种相似类型之一,node是节点字典。这只是文档所暗示的,但在the source中,您可以直接看到它是标准的Python dict

正如the documentation所说,dict.items()会以“任意顺序”返回项目视图,这些项目因Python实现而异,并取决于字典的插入和删除历史。“

(如果您使用的是Python 2.x,则没有“视图”,只有一对配对列表,但the docs对这些配对的任意顺序使用完全相同的措辞。)

所以,这正是你应该期待的。 items()以任意顺序为您提供项目,这些项目在插入后会发生变化。

如果您需要跟踪插入顺序,通常会使用collections.OrderedDict,或者单独手动跟踪它们。如果你想要它们的其他顺序,比如排序,你同样需要使用不同的类型或手动执行。