次のような辞書のリストがあります。
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
Min()およびmax()価格を見つけたい。今、私はラムダ式のキーを使用してこれを簡単にソートできます(別のSO記事で見られるように)。 Pythonにはほとんど常に直接的な方法があるのを見てきましたので、これは私にとってもう少し学ぶ機会です。
いくつかのオプションがあります。これは簡単なものです:
seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)
[編集]
リストを1回だけ反復したい場合は、これを試すことができます(値がint
sとして表されると仮定):
import sys
lo,hi = sys.maxint,-sys.maxint-1
for x in (item['the_key'] for item in dict_list):
lo,hi = min(x,lo),max(x,hi)
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
maxPricedItem = max(lst, key=lambda x:x['price'])
minPricedItem = min(lst, key=lambda x:x['price'])
これは、最高価格が何であるかだけでなく、どの品目が最も高価であるかを示します。
最も直接的な(そして最もPython的な)式は次のようなものになると思います。
min_price = min(item['price'] for item in items)
これにより、リストをソートするオーバーヘッドが回避され、リスト内包表記の代わりにジェネレーター式を使用することで、実際にはリストの作成も回避されます。効率的、直接、読みやすい... Pythonic!
答えの1つは、ディクショナリをジェネレータ式内の目的の値にマッピングし、組み込みのmin
とmax
を適用することです。
myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)
これも使用できます:
from operator import itemgetter
lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
max(map(itemgetter('price'), lst))