Find the lowest value in a dictionary list in python

I want to find and return the minimum id value in a string, for example:

find_min_id([{"nonid": "-222", "id": 0}, {"id": -101}])
-101
find_min_id([{’id’: 63, 'id': 42}])
42

So far I have this:

def find_min_id(list):
    return min(list)

but it gives:

{'id': -101}

and I only need the value of the lowest id.

+4
source share
6 answers

Use option key min:

def find_min_id(l):
    return min(l, key=lambda d: d.get("id", float('inf')))["id"]

It actually finds the minimum id and does it without creating a new list.

, 'id'. .get("id", float('inf')). , inf, id, . , min() , , , , , dicts 'id'. :

def find_min_id(l):
    return min(d["id"] for d in l if "id" in d)

inf min, :

import math
def find_min_id(l):
    res = min(l, key=lambda d: d.get("id", float('inf')))["id"]
    if math.isinf(res):
        raise ValueError("No dict has an 'id' key")
    return res
+6

, , id, id :

def find_min_id(lst):
    ids = [d['id'] for d in lst if 'id' in d]
    return min(ids) if ids else None

min (.. , , ).

+2
>>> ids = [{"nonid": "-222", "id": 0}, {"id": -101}]
>>> min([val for obj in ids for key, val in obj.items() if key == 'id'])
-101
>>> ids = [{'id': 63}, { 'id': 42}]
>>> min([val for obj in ids for key, val in obj.items() if key == 'id'])
42

.

:

def find_lowest(ids):
    return min([val for obj in ids for key, val in obj.items() if key == 'id'])

.

, . -, min . , :

>>> min([1,2,3,4,6,1,0])
0

, , , , [val for obj in ids for key, val in obj.items() if key == 'id'].

, , , , ? , . ? , , , :

, :

for obj in ids

, ids. :

key, val in obj.items() if key == 'id'

object dict, items , , . , : {'id': 100}, id , 100 - . , , key id, :

[val

, . - , val.

UPDATE:

- id , ValueError, min , , , :

def find_lowest(ids):
    _ret = [val for obj in ids for key, val in obj.items() if key == 'id']
    if _ret:
        return min(_ret)
    else:
        return None
+2

" " . , 'id' .

def find_min_id(lst):
    return min([d[key] for key in d for d in lst if key=="id"])

, list , list().

:

>>> def find_min_id(lst):
    return min([d[key] for key in d for d in lst if key=="id"])

>>> find_min_id(lst)
-101

, !

+1

None, id.

>>> data = [{"nonid": "-222", "id": 0}, {"id": -101}, {"nonid":-200}]
>>> min(filter(lambda x: x is not None, map(lambda x: x.get('id', None),
...    data)) or [None])
-101

filter(lambda x: x is not None, ...) id, map(lambda x: x.get('id', None), data) id , or [None] , id.

+1

list - Python.

def find_min_id(my_list)  
    id_list = []
    for record in my_list:
        if 'id' in record:
            id_list.append(record['id'])
    return min(id_list)
0

All Articles