私はこのリストを持っています:
L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
このリストを要素ごとcountry
(またはstatus
要素ごと)、ASC/DESC で並べ替える方法。
list.sort()
リストをその場でソートするかsorted
、新しいリストを取得するために使用します。
>>> L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
>>> L.sort(key= lambda x:x['country'])
>>> L
[{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
オプションのキーワード引数reverse = True
をsort
andsorted
に渡して、降順で並べ替えることができます。
大文字のアルファベットは、対応する小文字のバージョンよりも小さいと見なされるため (ASCII 値のため)、str.lower
同様に使用する必要がある場合があります。
>>> L.sort(key= lambda x:x['country'].lower())
>>> L
[{'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'France'}, {'status': 1, 'country': 'usa'}]
>>> from operator import itemgetter
>>> L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
>>> sorted(L, key=itemgetter('country'))
[{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
>>> sorted(L, key=itemgetter('country'), reverse=True)
[{'status': 1, 'country': 'usa'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'France'}]
>>> sorted(L, key=itemgetter('status'))
[{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]
名前付き関数のキーを引き出すことは、実際のコードにとっては良い考えです。これで、明示的にテストを記述できるようになりました
def by_country(x):
# For case insensitive ordering by country
return x['country'].lower()
L.sort(key=by_country)
もちろん用途などに合わせてご使用いただけsorted(L, key=...)
ますreverse=True
。