在python中查找字典列表中的最低值

use*_*846 5 python return list

我想在字符串中查找并返回id的最小值,例如:

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

到目前为止我有这个:

def find_min_id(list):
    return min(list)
Run Code Online (Sandbox Code Playgroud)

但这给了:

{'id': -101}
Run Code Online (Sandbox Code Playgroud)

我只想要最低id的值.

Cla*_*diu 7

使用key参数min:

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

这实际上找到了min id,并在不创建新列表的情况下完成.

唯一的问题是,列表中的元素可能没有'id'密钥.因此我不得不使用.get("id", float('inf')).因此,inf如果没有id密钥,函数将返回,这可能是不可取的.什么min()不给当空列表是它抛出一个异常,那么我们可能想要做相同的,如果没有,我们通过它的类型的字典有一个'id'关键.在这种情况下,生成器的最小值可能确实更好:

def find_min_id(l):
    return min(d["id"] for d in l if "id" in d)
Run Code Online (Sandbox Code Playgroud)

另一种方法是检查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
Run Code Online (Sandbox Code Playgroud)


Bar*_*zKP 2

另一种方法,但适用于字典中没有的情况,以及根本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
Run Code Online (Sandbox Code Playgroud)

没有例外,也没有运行min人为扩展的列表(即,在条目不是 id 条目的情况下放置最大浮点数的答案)。