In List of Dicts, find min() value of a common Dict field

后端 未结 5 1743
说谎
说谎 2020-11-27 12:00

I have a list of dictionaries like so:

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

I want to fin

相关标签:
5条回答
  • 2020-11-27 12:26

    One answer would be mapping your dicts to the value of interest inside a generator expression, and then applying the built-ins min and max.

    myMax = max(d['price'] for d in myList)
    myMin = min(d['price'] for d in myList)
    
    0 讨论(0)
  • There are several options. Here is a straight-forward one:

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

    [Edit]

    If you only wanted to iterate through the list once, you could try this (assuming the values could be represented as 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)
    
    0 讨论(0)
  • 2020-11-27 12:30
    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'])
    

    This tells you not just what the max price is but also which item is most expensive.

    0 讨论(0)
  • 2020-11-27 12:38

    can also use this:

    from operator import itemgetter
    
    lst = [{'price': 99, 'barcode': '2342355'}, {'price': 88, 'barcode': '2345566'}]  
    max(map(itemgetter('price'), lst))
    
    0 讨论(0)
  • 2020-11-27 12:39

    I think the most direct (and most Pythonic) expression would be something like:

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

    This avoids the overhead of sorting the list -- and, by using a generator expression, instead of a list comprehension -- actually avoids creating any lists, as well. Efficient, direct, readable... Pythonic!

    0 讨论(0)
提交回复
热议问题