如何在python heapq中使用lambdas?

如何在python heapq中使用lambdas?,python,heap,Python,Heap,在python heapq中,如果要放入对象,如何使用lambda指定其键?比如heapq.heappush(Q,v,key=lambda x:f(x)) 谢谢你不能。或者更确切地说,您不能将其指定为lambda。但是,您可以创建一堆元组,heapq.heappush(Q,(key(v),v))和heapq.heappop(Q)[1]详细说明我的,如果f(v)始终返回唯一值,或者如果v可以排序(您也可以设置排序,如中所示),那么这是有效的 我使使用heapq变得更容易,并允许lambdas进行排

在python heapq中,如果要放入对象,如何使用lambda指定其键?比如
heapq.heappush(Q,v,key=lambda x:f(x))


谢谢

你不能。或者更确切地说,您不能将其指定为lambda。但是,您可以创建一堆元组,
heapq.heappush(Q,(key(v),v))
heapq.heappop(Q)[1]

详细说明我的,如果
f(v)
始终返回唯一值,或者如果
v
可以排序(您也可以设置排序,如中所示),那么这是有效的

我使使用heapq变得更容易,并允许lambdas进行排序

通常,您可以添加一个唯一的数字来克服该限制:

heapq.heappush(Q, create_item(v, f))
(key, v) = heapq.heappop()

# f is your desired function/lambda
# unique_value() generates a different value each time (e.g. a counter)
def create_item(v, f):
    key = (f(v), unique_value())
    return (key, v)

很遗憾,无法将函数发送到heapq…:/

嗯,这个问题不是已经回答了吗?请注意,如果
v
没有顺序,
key(v)
必须返回一个唯一的数字。因为如果两个
键(v)
相等,heapq将尝试排序
v
,它将崩溃。看见