118

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

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

min()max()価格を見つけたいです。これで、ラムダ式のキーを使用してこれを簡単に並べ替えることができます(別のStack Overflowの投稿にあります)。そのため、他に方法がない場合は、行き詰まりません。しかし、私が見てきたことから、Pythonにはほとんどの場合直接的な方法があるので、これは私がもう少し学ぶ機会です。

4

5 に答える 5

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

これにより、最高価格だけでなく、どのアイテムが最も高いかがわかります。

于 2011-03-16T14:20:56.920 に答える
70

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

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

[編集]

リストを1回だけ繰り返したい場合は、これを試すことができます(値を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)
于 2011-03-16T04:01:25.443 に答える
47

最も直接的な(そして最もPythonicな)表現は次のようになると思います:

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

これにより、リストを並べ替えるオーバーヘッドが回避され、リスト内包表記の代わりにジェネレータ式を使用することで、実際にはリストの作成も回避されます。効率的で、直接的で、読みやすい... Pythonic!

于 2011-03-16T04:00:59.640 に答える
12

1つの答えは、ディクテーションをジェネレータ式内の対象の値にマッピングしてから、組み込みのとを適用することminですmax

myMax = max(d['price'] for d in myList)
myMin = min(d['price'] for d in myList)
于 2011-03-16T04:00:33.587 に答える
4

これも使用できます:

from operator import itemgetter

lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]  
max(map(itemgetter('price'), lst))
于 2018-09-30T06:23:48.213 に答える