如何从odict_iterator中获取OrderedDict值?

时间:2019-05-02 21:40:01

标签: python

我正在使用tsplib95解析.tsp文件。我想获取节点列表 来自tsplib95的问题类。我检查了文档, get_nodes()方法在节点的OrderedDict上返回iter()。

如何使用迭代器访问OrderedDict的值? 我只能使用迭代器来迭代键值。

OrderedDict如下所示:
OrderedDict([[1,(20833.3333,17100.0)),...,(29,(27462.5,12992.2222))))

我尝试在for循环中使用 next ()方法获取坐标值。

            tsp_instance = tsplib95.load_problem(file.value)
            iterator = tsp_instance.get_nodes()

            print(next(iterator))
            print(iterator.__next__())

            for i in iterator:
                print(i)

但是所有这些都只能访问OrderedDict中的键 当我没有原始的OrderedDict时,我不知道如何获取坐标的值。

2 个答案:

答案 0 :(得分:1)

您将需要使用其他迭代器。默认迭代器不知道值,仅键。 例如

>>> od = OrderedDict([('a', 1), ('b', 2)])
>>> iterator = iter(od.items())
>>> print(list(iterator))
[('a', 1), ('b', 2)]

在Python 2中,您还可以执行iterator = od.iteritems()

答案 1 :(得分:0)

get_nodes()不是您应该用于此的工具。 get_nodes()仅用于在节点上返回迭代器;该迭代器有时是OrderedDict上的迭代器,这一事实是实现细节,并且不一定总是OrderedDict迭代器。

如果要访问具有节点坐标的问题实例的节点坐标,则应使用get_graph()并检查NetworkX node attributes;节点的坐标将在'coord'节点属性下。