Help us understand the problem. What is going on with this article?

[Python] コレクション型をソート

More than 3 years have passed since last update.

Pythonのコレクション型をソートする方法についてまとめる。

リスト

まず1つ目は、リストのsortメソッドを使う方法。
sortメソッドは返り値をとらず、もとのリストを書き換える。
デフォルトでは昇順にソートされる。

>>> a = [8, 1, 5, 3, 6]
>>> a.sort()
>>> a
[1, 3, 5, 6, 8]

降順にソートしたい場合は引数のreverseキーワードをTrueにする。

>>> a = [8, 1, 5, 3, 6]
>>> a.sort(reverse=True)
>>> a
[8, 6, 5, 3, 1]

2つ目は、sorted関数を使う方法。
sorted関数はソート済みのリストを返す。

>>> a = [8, 1, 5, 3, 6]
>>> sorted(a)
[1, 3, 5, 6, 8]

sorted関数でもreverseキーワードをTrueにすると降順にソートできる。

>>> a = [8, 1, 5, 3, 6]
>>> sorted(a, reverse=True)
[8, 6, 5, 3, 1]

辞書

Pythonの辞書は順番が保証されないのでソートはできない。
sorted関数の引数に辞書を渡すとキーのみのソート済みリストが返される。

>>> b = {'Matsui': 55, 'Ichiroh': 51, 'Kuroda': 18}
>>> sorted(b)
['Ichiroh', 'Kuroda', 'Matsui']

itemsメソッドを使うとリストにタプルが入れ子になって返ってくる。
このとき、keyでソートされている。

>>> b = {'Matsui': 55, 'Ichiroh': 51, 'Kuroda': 18}
>>> sorted( b.items() )
[('Ichiroh', 51), ('Kuroda', 18), ('Matsui', 55)]

valueでソートしたい場合は、keyパラメータとlambda関数を用いる。

>>> b = {'Matsui': 55, 'Ichiroh': 51, 'Kuroda': 18}
>>> sorted(b.items(), key=lambda x:x[1])
[('Kuroda', 18), ('Ichiroh', 51), ('Matsui', 55)]

構造を維持したままソートしたいときは、OrderedDictを用いる。 ※ @shiracamus さんのご指摘により追加・修正。

>>> b = {'Matsui': 55, 'Ichiroh': 51, 'Kuroda': 18}
>>> b
{'Ichiroh': 51, 'Matsui': 55, 'Kuroda': 18}
>>> from collections import OrderedDict
>>> c = OrderedDict(sorted(b.items(), key=lambda x:x[1]))
>>> c
OrderedDict([('Kuroda', 18), ('Ichiroh', 51), ('Matsui', 55)])
>>> c.values()
[18, 51, 55]
>>> c.keys()
['Kuroda', 'Ichiroh', 'Matsui']

タプル

タプルは不変性オブジェクトなので厳密にはソートはできないが、sorted関数とtuple関数を使うことで実現できる。

>>> d = (8, 1, 5, 3, 6)
>>> tuple( sorted(d) )
(1, 3, 5, 6, 8)

公式ページも参考にどうぞ。

ysk24ok
今後Qiitaに記事を更新することはありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした