やってみる

アウトプットすべく己を導くためのブログ。その試行錯誤すらたれ流す。

Pythonでソート(複数キーでdescとasc混在)

 1キーずつ。ソート順位が低いほうから順に。

成果物

情報源

コード

要素がタプル型

import operator
names=[(1,'A'),(2,'B'),(2,'A'),(1,'C')]
print(names)
names.sort(key=operator.itemgetter(1)) # 第2キー
print(names)
names.sort(key=operator.itemgetter(0), reverse=True) # 第1キー
print(names)
>>> import operator
>>> names=[(1,'A'),(2,'B'),(2,'A'),(1,'C')]
>>> print(names)
[(1, 'A'), (2, 'B'), (2, 'A'), (1, 'C')]
>>> names.sort(key=operator.itemgetter(1)) # 第2キー
>>> print(names)
[(1, 'A'), (2, 'A'), (2, 'B'), (1, 'C')]
>>> names.sort(key=operator.itemgetter(0), reverse=True) # 第1キー
>>> print(names)
[(2, 'A'), (2, 'B'), (1, 'A'), (1, 'C')]

 ポイントはソートの優先順位が低い順にsortすること。

要素がdict型

 リスト要素がdict型なら、operator.itemgetter('キー名')のように指定することができる。

import operator
players=[{'point': 0, 'name': 'A'},{'point': 5, 'name': 'B'},{'point': 5, 'name': 'A'},]
print(players)
players.sort(key=operator.itemgetter('name')) # 第2キー: name asc
print(players)
players.sort(key=operator.itemgetter('point'), reverse=True) # 第1キー: point desc
print(players)
>>> import operator
>>> players=[{'point': 0, 'name': 'A'},{'point': 5, 'name': 'B'},{'point': 5, 'name': 'A'},]
>>> print(players)
[{'point': 0, 'name': 'A'}, {'point': 5, 'name': 'B'}, {'point': 5, 'name': 'A'}]
>>> players.sort(key=operator.itemgetter('name')) # 第2キー: name asc
>>> print(players)
[{'point': 0, 'name': 'A'}, {'point': 5, 'name': 'A'}, {'point': 5, 'name': 'B'}]
>>> players.sort(key=operator.itemgetter('point'), reverse=True) # 第1キー: point desc
>>> print(players)
[{'point': 5, 'name': 'A'}, {'point': 5, 'name': 'B'}, {'point': 0, 'name': 'A'}]

対象環境

$ uname -a
Linux raspberrypi 4.19.42-v7+ #1218 SMP Tue May 14 00:48:17 BST 2019 armv7l GNU/Linux