python中字典列表的两级排序

时间:2012-09-19 15:40:49

标签: python sorting

我有一个字典列表如下:

 {"id": 1, "score": some_score.. othe values}
 {"id": 1, "score": some_differetscore.. othe values}  
 {"id": 22, "score": some_score.. othe values}
 {"id": 3, "score": some_score.. othe values}

我希望得到的是通过这个列表进行迭代,使其按如下方式排序。

列表按“id”排序,然后以“score”

反向排序

因此所有带有“id”1的条目都会聚在一起,然后最高分的条目位于顶部? 我该怎么做?

由于

2 个答案:

答案 0 :(得分:8)

试试这个:

sorted(mylist, key=lambda d: (d["id"], -d["score"]))

答案 1 :(得分:1)

实际上相同,但更清洁,可单元测试:

def weight(data):
    """We sort the data first by its ID, then by descending score."""
    return data["id"], -data["score"]

sorted(mylist, key=weight)