3

このリストを最初に名前で逆に並べ替えようとしています。次に、最初の結果セット (フラグ = "ZAR") の後、残りの要素を逆ではなく時間で並べ替えます。

import operator
list = [
    {"flag":"ZAR", "time":"17:45"},
    {"flag":"AUS", "time":"17:30"},
    {"flag":"AUS", "time":"17:15"},
    {"flag":"USA", "time":"17:00"},
    {"flag":"GBP", "time":"16:55"},
    {"flag":"ZAR", "time":"16:45"},
    {"flag":"USA", "time":"16:35"},
    {"flag":"GBP", "time":"16:25"},
    {"flag":"ZAR", "time":"16:15"},
]

list.sort(key=operator.itemgetter("time"))
list.sort(key=operator.itemgetter("flag"),reverse=True)


print list

[{'flag': 'ZAR', 'time': '16:15'}, {'flag': 'ZAR', 'time': '16:45'}, {'flag': 'ZAR', 'time': '17:45'}, {'flag': 'USA', 'time': '16:35'}, {'flag': 'USA', 'time': '17:00'}, {'flag': 'GBP', 'time': '16:25'}, {'flag': 'GBP', 'time': '16:55'}, {'flag': 'AUS', 'time': '17:15'}, {'flag': 'AUS', 'time': '17:30'}]

ご覧のとおり、フラグの並べ替えは正しく行われましたが、他の要素は並べ替えられた国の時間でのみ並べ替えられています。

私が望むのは、常に最初に ZAR を持ち、その後はフラグ名が何であるかは問題ではなく、時間だけです。したがって、次の結果が得られるはずです。

[{'flag': 'ZAR', 'time': '16:15'}, {'flag': 'ZAR', 'time': '16:45'}, {'flag': 'ZAR', 'time': '17:45'}, {'flag': 'GBP', 'time': '16:25'}, {'flag': 'USA', 'time': '16:35'}, {'flag': 'GBP', 'time': '16:55'}, {'flag': 'USA', 'time': '17:00'}, {'flag': 'AUS', 'time': '17:15'}, {'flag': 'AUS', 'time': '17:30'}]

これはどのように行われますか?

4

1 に答える 1

5

コードを次のように修正します。

import operator
data = [
    {"flag":"ZAR", "time":"17:45"},
    {"flag":"AUS", "time":"17:15"},
    {"flag":"USA", "time":"17:00"},
    {"flag":"GBP", "time":"16:55"},
    {"flag":"ZAR", "time":"16:45"},
    {"flag":"USA", "time":"16:35"},
    {"flag":"GBP", "time":"16:25"},
    {"flag":"ZAR", "time":"16:15"},
]

data.sort(key=operator.itemgetter("time"))
data.sort(key=lambda L: L['flag'] == 'ZAR', reverse=True)

# [{'flag': 'ZAR', 'time': '16:15'}, {'flag': 'ZAR', 'time': '16:45'}, {'flag': 'ZAR', 'time': '17:45'}, {'flag': 'GBP', 'time': '16:25'}, {'flag': 'USA', 'time': '16:35'}, {'flag': 'GBP', 'time': '16:55'}, {'flag': 'USA', 'time': '17:00'}, {'flag': 'AUS', 'time': '17:15'}, {'flag': 'AUS', 'time': '17:30'}]
于 2013-09-02T11:20:46.473 に答える