python で辞書のキーを指定して並び替える

python で辞書のキーを指定して並び替える

今後も使うことがあると思うので書き残しておこうと思います。

コード

コードは下記の通りです。


import pprint


def sort_dicts_by_key(dicts, keys, reverse=False):
    """
    第一引数に並び替え対象の配列を指定する。
    第二引数に並び替える属性名が入った配列を指定する。
    第三引数に昇順か降順を指定する。
    """
    dicts.sort(key=lambda x: ([x[key] for key in keys]), reverse=reverse)
    return dicts


# 配列を用意する。
datetime_list = [
    {'year': 2000, 'month': 16, 'date': 3},
    {'year': 2000, 'month': 12, 'date': 3},
    {'year': 2001, 'month': 16, 'date': 2},
    {'year': 2022, 'month': 12, 'date': 1},
]

# 並び替えの優先順位を date, month, year で指定する。
keys = ['date', 'month', 'year']

# 実行する。
datetime_list = sort_dicts_by_key(datetime_list, keys)

# 結果を出力する
pprint.pprint(datetime_list)
# [{'date': 1, 'month': 12, 'year': 2022},
#  {'date': 2, 'month': 16, 'year': 2001},
#  {'date': 3, 'month': 12, 'year': 2000},
#  {'date': 3, 'month': 16, 'year': 2000}]