Saya punya daftar kamus seperti ini:
[{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]
Saya ingin mencari harga min () dan max (). Sekarang, saya dapat mengurutkan ini dengan cukup mudah menggunakan kunci dengan ekspresi lambda (seperti yang ditemukan di artikel SO lainnya), jadi jika tidak ada cara lain saya tidak terjebak. Namun, dari apa yang saya lihat hampir selalu ada cara langsung dengan Python, jadi ini adalah kesempatan bagi saya untuk belajar lebih banyak.
seq
, dan daftarnya besar, ini bisa menjadi tidak efisien karena memori untuk seluruh daftar harus dialokasikan hanya untuk menemukan maks.AttributeError: module 'sys' has no attribute 'maxint'
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'])
Ini memberi tahu Anda tidak hanya berapa harga maksimal tetapi juga barang mana yang paling mahal.
sumber
Saya pikir ekspresi yang paling langsung (dan paling Pythonic) adalah seperti ini:
min_price = min(item['price'] for item in items)
Hal ini menghindari overhead pengurutan daftar - dan, dengan menggunakan ekspresi generator, alih-alih pemahaman daftar - sebenarnya juga menghindari pembuatan daftar apa pun. Efisien, langsung, dapat dibaca ... Pythonic!
sumber
Satu jawaban akan memetakan penis Anda ke nilai yang diinginkan di dalam ekspresi generator, dan kemudian menerapkan bawaan
min
danmax
.myMax = max(d['price'] for d in myList) myMin = min(d['price'] for d in myList)
sumber
[
dan]
, dan sebenarnya menghasilkan daftar Python sebagai langkah perantara.bisa juga menggunakan ini:
from operator import itemgetter lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}] max(map(itemgetter('price'), lst))
sumber