2

次のような辞書のリストがあります。

 {"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 のすべてのエントリがまとめられ、スコアが最も高いエントリが一番上になりますか?? どうすればいいですか?

ありがとう

4

2 に答える 2

8

これを試して:

sorted(mylist, key=lambda d: (d["id"], -d["score"]))
于 2012-09-19T15:42:24.190 に答える
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)
于 2012-09-19T15:47:15.240 に答える