Python - 排序字典列表

时间:2017-10-27 19:02:07

标签: python sorting queue

我正在尝试使用搜索算法,我正在尝试使用A *算法来解决问题。

我正在使用字典列表来保留内部节点结构。 每个节点的特征在于某个状态和相关的成本。 选择函数应返回成本最低的节点。 为了能够做到这一点,我每次都过滤列表。 如果问题非常小,我发现这很快 但是在列表非常大的情况下,此函数使用算法总时间的84%。

我的问题是,是否有更有效的方法。

def select(self, frontier):
    frontier.sort(key = lambda x: x['f_cost'])
    #select the node with the lowest f_cost
    return frontier.pop(0)

2 个答案:

答案 0 :(得分:2)

是的,从一开始就不要.pop!那是线性时间。最后的.pop是不变的,所以就这样做:

def select(self, frontier):
    frontier.sort(key = lambda x: x['f_cost'], reverse=True)
    #select the node with the lowest f_cost
    return frontier.pop()

如果您尝试维护已排序的序列,则可能需要考虑其他数据结构。您可以查看heapq,它是标准库的一部分,尽管它非常简单。您可能还会考虑sortedcontainers库,显然,非常高效

答案 1 :(得分:0)

您应该使用attrgetteritemgetter等函数作为键而不是lambda函数,因为它被认为更快。

文档: https://docs.python.org/3/howto/sorting.html

有关详细信息,请查看此答案。 operator.itemgetter or lambda