Python 网络节点列表问题-添加另一个节点后列表将立即更改

Python 网络节点列表问题-添加另一个节点后列表将立即更改,python,eclipse,pydev,networkx,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

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

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

下面是我的输出

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

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'})]

假设
g
是一个
networks.Graph
或三种类似类型中的一种,
node
是一个节点字典。这仅在文档中有所暗示,但在中,您可以直接看到它是标准的Python
dict

如上所述,
dict.items()
以“任意顺序”返回项目视图,该顺序在Python实现中有所不同,并且取决于字典的插入和删除历史记录

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

所以,这正是你应该期待的
items()
以任意顺序提供项目,插入后会发生更改


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

.items()
判断,
节点是一个
dict
,它是无序的。+1到korylprince。但要确保:您从
类型(g.nodes)
g.nodes
中得到了什么?什么类型是
g
?类型(g.nodes())请注意
g.node
与networkx中的
g.nodes()
不同。前者是内部字典,后者是访问器函数,它提供内部字典中存在的节点列表。字典不按顺序排列的部分原因是,通常你不需要按顺序排列。你可以查东西,比较两个单词等等,而不用担心顺序。如果您需要订单,您可以在运行中强制执行订单,例如,使用
排序(d.items(),key=您想要的任何内容)
。根据
g.node.items()
的顺序,您试图执行什么操作?不管是什么,也许有更好的答案。