質問

私は次のような辞書のリストを持っています:

[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]

min()とmax()の価格を見つけたいです。今、私はこれをラムダの表現でキーを使用して十分に簡単に並べ替えることができます(別の記事に見られるように)。他の方法がなければ、私は立ち往生していません。しかし、私が見たことから、Pythonではほとんど常に直接的な方法があるので、これは私がもう少し学ぶ機会です。

役に立ちましたか?

解決

いくつかのオプションがあります。これが簡単なものです:

seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)

編集

リストを一度に繰り返したい場合は、これを試すことができます(値が次のように表される可能性があると仮定して ints):

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'])

これは、最大価格が何であるかだけでなく、どのアイテムが最も高価であるかもわかります。

最も直接的な(そして最もピトニック)式は次のようなものだと思います。

min_price = min(item['price'] for item in items)

これにより、リストの並べ替えのオーバーヘッドが回避されます。また、リストの理解の代わりに発電機式を使用することにより、実際にリストの作成も回避できます。効率的、直接、読み取り可能な... pythonic!

1つの答えは、発電機式内の関心のある価値にdictをマッピングし、ビルトインを適用することです。 minmax.

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))
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top