我在二进制图开发过程中遇到了一些问题。
到目前为止,我的问题是一个不稳定的节点列表。一旦我添加节点,输出列表就会完全重新排序。
以下是我的输出。
以前有人遇到过这样的问题吗?
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'})]
答案 0 :(得分:1)
假设g
是networks.Graph
或三种相似类型之一,node
是节点字典。这只是文档所暗示的,但在the source中,您可以直接看到它是标准的Python dict
。
正如the documentation所说,dict.items()
会以“任意顺序”返回项目视图,这些项目因Python实现而异,并取决于字典的插入和删除历史。“
(如果您使用的是Python 2.x,则没有“视图”,只有一对配对列表,但the docs对这些配对的任意顺序使用完全相同的措辞。)
所以,这正是你应该期待的。 items()
以任意顺序为您提供项目,这些项目在插入后会发生变化。
如果您需要跟踪插入顺序,通常会使用collections.OrderedDict
,或者单独手动跟踪它们。如果你想要它们的其他顺序,比如排序,你同样需要使用不同的类型或手动执行。