从字典列表中获取所有最小值

时间:2020-06-09 21:52:10

标签: python

我有以下代码段:

list = [{"num":1,"test":"A"},{"num":6,"test":"B"},{"num":5,"test":"c"},{"num":1,"test":"D"}]
min = None
for x in list:
    if x["num"]<min or min==None:
        min=x["num"]
print(min)
print([index for index, element in enumerate(list) 
                      if min == element["num"]])

实际上并没有输出任何有用的东西,我的目标是输出如标题中所述的num中带有“ 1”的字典。

我知道一个菜鸟问题,但这是我第一次接触该语言。

谢谢!

3 个答案:

答案 0 :(得分:1)

min()带有一个key参数,可让您指定如何计算最小值。这将使您找到具有最小num值的对象。然后,您可以使用该列表查找功能(或类似方法)来找到所有这些功能。

l = [{"num":1,"test":"A"},{"num":6,"test":"B"},{"num":5,"test":"c"},{"num":1,"test":"D"}]

m = min(l, key=lambda d: d['num'])
# {'num': 1, 'test': 'A'}

[item for item in l if item['num'] == m['num']]
# [{'num': 1, 'test': 'A'}, {'num': 1, 'test': 'D'}]

答案 1 :(得分:0)

您可以尝试以下操作:

list_=[{"num":1,"test":"A"},{"num":6,"test":"B"},{"num":5,"test":"c"},{"num":1,"test":"D"}]
min_=min(list_,key=lambda x: x["num"])
min_ = min_["num"]
l=list(filter(lambda x: x["num"]==min_,list_))
print(l)

答案 2 :(得分:0)

您需要在程序开始时将min设置为任意大的数字。我将其设置为500。然后,您必须检查“ num”值是否小于或等于min,否则它将无法同时捕获两个 1 值。

list = [{"num":1,"test":"A"},{"num":6,"test":"B"},{"num":5,"test":"c"},{"num":1,"test":"D"}]
min = 500
for x in list:
    if x["num"]<=min or min==None:
        min=x["num"]
        print(x)
print(min)