2

私はこのリストを持っています:

L = [{'status': 1, 'country': 'France'}, {'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'usa'}]

このリストを要素ごとcountry(またはstatus要素ごと)、ASC/DESC で並べ替える方法。

4

3 に答える 3

9

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 = Truesortandsortedに渡して、降順で並べ替えることができます。

大文字のアルファベットは、対応する小文字のバージョンよりも小さいと見なされるため (ASCII 値のため)、str.lower同様に使用する必要がある場合があります。

>>> L.sort(key= lambda x:x['country'].lower())
>>> L
[{'status': 1, 'country': 'canada'}, {'status': 1, 'country': 'France'}, {'status': 1, 'country': 'usa'}]
于 2013-05-14T09:45:59.617 に答える
7
>>> 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'}]
于 2013-05-14T09:45:59.697 に答える
2

名前付き関数のキーを引き出すことは、実際のコードにとっては良い考えです。これで、明示的にテストを記述できるようになりました

def by_country(x):
    # For case insensitive ordering by country
    return x['country'].lower()

L.sort(key=by_country)

もちろん用途などに合わせてご使用いただけsorted(L, key=...)ますreverse=True

于 2013-05-14T10:11:19.013 に答える