在Python中,使用sorted()方法,是否可以按优先级字段对字典列表进行排序?

在Python中,使用sorted()方法,是否可以按优先级字段对字典列表进行排序?,python,sorted,Python,Sorted,我有一个字典列表,我按照给定的顺序按多个键对它们进行排序(第一个“名称”,第二个“开始”,第三个“结束”): 我希望最后一次排序由优先级字段完成: dict['Status']是一个字符串名称,如“基因”、“mRNA”、“外显子”和“CDS”。“基因”这个名字必须比其他名字高,“CDS”这个名字必须比其他名字低 感谢您的回答,第一条建议:不要使用内置名称作为变量名。当你以后尝试使用它们时,你会非常困惑。例如 dict = [1, 2, 3] d = dict(a="b") 将惨败。所以-永

我有一个字典列表,我按照给定的顺序按多个键对它们进行排序(第一个“名称”,第二个“开始”,第三个“结束”):

我希望最后一次排序由优先级字段完成:

dict['Status']是一个字符串名称,如“基因”、“mRNA”、“外显子”和“CDS”。“基因”这个名字必须比其他名字高,“CDS”这个名字必须比其他名字低


感谢您的回答,

第一条建议:不要使用内置名称作为变量名。当你以后尝试使用它们时,你会非常困惑。例如

 dict = [1, 2, 3]
 d = dict(a="b")
将惨败。所以-永远不要调用变量列表、dict、file、str、int和所有其他变量

您的实际问题通过一个简单的查找表得到解决:

priorities = dict(gene=0, CDS=1000)
sorted_list = sorted(list, 
        key=lambda d: (d['Name'], d['Start'], -d['End'], 
        priorities.get(d['Status'], 1)))

那么告诉我们您到目前为止尝试了什么?输入:应该是
priorities.get(d['Status'],1))
。我想这里1可以作为默认值,OTOH,我不想提供默认值,所以如果出现无效的优先级名称,我们会得到一个显式的键错误。当然,如果需要,我们可以捕获keyrerror异常并打印整个dict。
priorities = dict(gene=0, CDS=1000)
sorted_list = sorted(list, 
        key=lambda d: (d['Name'], d['Start'], -d['End'], 
        priorities.get(d['Status'], 1)))