dictsのリストでは、共通のdictフィールドのmin()値を見つけます
-
24-10-2019 - |
質問
私は次のような辞書のリストを持っています:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
min()とmax()の価格を見つけたいです。今、私はこれをラムダの表現でキーを使用して十分に簡単に並べ替えることができます(別の記事に見られるように)。他の方法がなければ、私は立ち往生していません。しかし、私が見たことから、Pythonではほとんど常に直接的な方法があるので、これは私がもう少し学ぶ機会です。
解決
いくつかのオプションがあります。これが簡単なものです:
seq = [x['the_key'] for x in dict_list]
min(seq)
max(seq)
編集
リストを一度に繰り返したい場合は、これを試すことができます(値が次のように表される可能性があると仮定して 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'])
これは、最大価格が何であるかだけでなく、どのアイテムが最も高価であるかもわかります。
最も直接的な(そして最もピトニック)式は次のようなものだと思います。
min_price = min(item['price'] for item in items)
これにより、リストの並べ替えのオーバーヘッドが回避されます。また、リストの理解の代わりに発電機式を使用することにより、実際にリストの作成も回避できます。効率的、直接、読み取り可能な... pythonic!
1つの答えは、発電機式内の関心のある価値にdictをマッピングし、ビルトインを適用することです。 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))
所属していません StackOverflow