Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我想按一个标准升序,按另一个标准降序,如何使用排序函数?_Python_Sorting_Lambda_Key - Fatal编程技术网

Python 如果我想按一个标准升序,按另一个标准降序,如何使用排序函数?

Python 如果我想按一个标准升序,按另一个标准降序,如何使用排序函数?,python,sorting,lambda,key,Python,Sorting,Lambda,Key,我试图用Python实现A*算法作为一个学习练习。我有一个名为open的节点列表,其中包含表示图形节点名称的字符串。示例:打开[“节点a”、“节点b”、“节点c”]。我还有两个defaultdict字典,f_estim和g,它们包含{“节点名称”:表示与节点关联的某个成本的整数}。我需要按照f_estim中关联的值对open列表进行升序排序,如果两个节点的值相等,则根据g中的值进行降序。我是这样升序排序的:open.sort(key=lambda节点:f_estim[node])。当达到两个相等

我试图用Python实现A*算法作为一个学习练习。我有一个名为
open
的节点列表,其中包含表示图形节点名称的字符串。示例:
打开[“节点a”、“节点b”、“节点c”]
。我还有两个
defaultdict
字典,
f_estim
g
,它们包含
{“节点名称”:表示与节点关联的某个成本的整数}
。我需要按照
f_estim
中关联的值对
open
列表进行升序排序,如果两个节点的值相等,则根据
g
中的值进行降序。我是这样升序排序的:
open.sort(key=lambda节点:f_estim[node])
。当达到两个相等的值时,如何进行降序排序?我在
sort
函数的文档中找不到答案。谢谢大家!

您可以这样做:

open.sort(key=lambda node: (f_estim[node], -g[node]))

您是否尝试过排序函数请添加完整示例(输入和预期输出)您的lambda可以返回一个元组,第一个是主条件,第二个是负条件。您是否尝试过这样做?open.sort(key=lambda node:(f_estim[node],-g[node])示例:open[“a”,“b”,“c”,“d”]f_estim{“a”:5,“b”:5,“c”:4,“d”:4}g:{“a”:1,“b”:2,“c”:3,“d”:4}在open.sort(??),我想获得open[“d”,“c”,“b”,“a”]请注意,这仅适用于数字排序标准,而不适用于其他类型的可比标准(例如字符串)