0

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

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

下面是我的输出。

有没有人遇到过这样的问题?

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

1 回答 1

1

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

正如文档所说,dict.items()返回项目的视图“以任意顺序......在 Python 实现中有所不同,并取决于字典的插入和删除历史。”

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

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

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

于 2013-08-20T23:59:08.410 回答