data.json
{ "title": "サンプル", "records": [ {"item": "item 1", "point": 4.63 , "date":"2020-02-02" , "memo":"あ" }, {"item": "item 2", "point": 74.68, "date":"2020-02-01" , "memo":"う" }, {"item": "item 3", "point": 9.38, "date":"2020-02-05" , "memo":null }, {"item": "item 4", "point": 5.78, "date":"2020-02-14" , "memo":"い" }, {"item": "item 5", "point": 5.53, "date":"2020-02-07" , "memo":"え" } ] }
sorted を使用してソートする。
# -*- coding: UTF-8 -*- import json with open('data.json', 'r', encoding='utf-8') as f: # JSONファイル→辞書 data = json.load(f) data['records'] = sorted(data['records'], key=lambda k: k['point'], reverse=True) str = json.dumps(data, indent=4, skipkeys=True, ensure_ascii=False) print(str)
日付の昇順ソート
data['records'] = sorted(data['records'], key=lambda k: k['date'], reverse=False)
memo のソート、
null がある場合、そのままではソートできないので、'' 空文字でソートさせる必要がある。
data['records'] = sorted(data['records'], key=lambda k: '' if k['memo']==None else k['memo'], reverse=False)
↑ memo のソートの結果は、以下のようになる。
{ "title": "サンプル", "records": [ { "item": "item 3", "point": 9.38, "date": "2020-02-05", "memo": null }, { "item": "item 1", "point": 4.63, "date": "2020-02-02", "memo": "あ" }, { "item": "item 4", "point": 5.78, "date": "2020-02-14", "memo": "い" }, { "item": "item 2", "point": 74.68, "date": "2020-02-01", "memo": "う" }, { "item": "item 5", "point": 5.53, "date": "2020-02-07", "memo": "え" } ] }