ホームページ >バックエンド開発 >Python チュートリアル >Python 辞書リストを共通キーでソート(itemgetter関数を使用)

Python 辞書リストを共通キーでソート(itemgetter関数を使用)

不言
不言転載
2018-10-20 14:48:102559ブラウズ

この記事で紹介する内容は、Python による公開鍵による辞書リストのソート (itemgetter 関数を使用) に関するもので、一定の参考価値があります。困っている友人が参照することができます。お役に立てれば幸いです。

1. 要件

辞書のリストがあり、1 つ以上の辞書の値に基づいてリストを並べ替えたいと考えています。

2. 解決策

オペレーター モジュールで itemgetter 関数を使用して、このような構造を並べ替えるのは非常に簡単です。

例:

from operator import itemgetter
rows=[
{'name':'mark','age':18,'uid':'110'},
{'name':'miaomiao','age':28,'uid':'150'},
{'name':'miaomiao','age':8,'uid':'150'},
{'name':'xiaohei','age':38,'uid':'130'},
]

rows_by_name=sorted(rows,key=itemgetter('name'))
rows_by_uid=sorted(rows,key=itemgetter('uid'))
print(rows_by_name)
print(rows_by_uid)


#itemgetter还支持多个键
rows_by_name_age=sorted(rows,key=itemgetter('name','age'))
print(rows_by_name_age)

#itemgetter同样适用min、max
print(min(rows,key=itemgetter('uid')))
print(max(rows,key=itemgetter('age')))

実行結果:

[{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}]
[{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}]
[{'name': 'mark', 'age': 18, 'uid': '110'}, {'name': 'miaomiao', 'age': 8, 'uid': '150'}, {'name': 'miaomiao', 'age': 28, 'uid': '150'}, {'name': 'xiaohei', 'age': 38, 'uid': '130'}]
{'name': 'mark', 'age': 18, 'uid': '110'}
{'name': 'xiaohei', 'age': 38, 'uid': '130'}

Discussion

この例では、行が組み込みのsorted()関数に渡されます。この関数はキーワード引数 key を受け入れます。これは、行から単一の要素を入力として受け入れ、並べ替えに使用される値を返す呼び出し可能なオブジェクトを表す必要があります。 itemgetter() 関数は、そのような呼び出し可能なオブジェクトを作成します。

関数operator.itemgetter()で受け入れられるパラメータは、行レコードから必要な値を抽出するためのクエリマーカーとして使用できます。ディクショナリ キー名、数値リスト要素、またはオブジェクトの __getitem__() メソッドに渡すことができる任意の値を指定できます。複数のタグを itemgetter() に渡すと、生成される呼び出し可能オブジェクトはすべての要素を含むタプルを返し、sorted() はタプルのソート結果に従って出力結果を配置します。これは、複数のフィールドを同時に並べ替える場合に非常に便利です。

itemgetter() の関数を置き換えるためにラムダ式が使用されることがあります。たとえば、次のとおりです。

rows_by_uid=sorted(rows,key=lambda r:r['uid'])
rows_by_name_age=sorted(rows,key=lambda r:(r['name','age']))

このソリューションは通常、正常に機能します。ただし、itemgetter() を使用すると、通常はより高速に実行されます。したがって、パフォーマンスの問題を考慮する必要がある場合は、 itemgetter().

を使用する必要があります。

以上がPython 辞書リストを共通キーでソート(itemgetter関数を使用)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はsegmentfault.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。