在python中,如何获得对象/字典列表中最低的键值对,其中每个项目都有不同的,单独的键值对?

时间:2019-02-07 16:41:09

标签: python arrays list dictionary

我是python的初学者,因此我不确定Java和C ++中的某些内容如何在python中做。这些事情之一是从数组/列表中返回最小值。这似乎可以与未定义为dict的列表一起使用,但是正如您在下面看到的那样,我的最终输出列表实际上是dict的列表,我不确定如何执行此操作。

我希望有一个动态生成的键,值对的列表,以便添加到列表中的东西从一开始就耦合在一起,以便我知道列表中的项实际上意味着什么。我正在得到的那部分。问题是我有太多的值无法梳理以找到我真正要寻找的值,这是具有最低值的键值对,无论键是什么。

我已经尝试将输出从list更改为defaultdict(list),并更改将值附加到其上的方式,但是这会导致不良的输出。将我想要的两个输出耦合在一起的唯一可行的方法是将以下格式的项添加到列表中:{key: value},然后尝试按值降序对列表进行排序,然后选择第一个;不幸的是,我什至无法弄清楚该怎么做,因为python中的索引似乎与众不同。

我有一个看起来像这样的函数:

def getnumdistance(q, r)
  #gets numerical distance between two vectors from a csv file

def comparetotrain(testexample, trainlist):
  distancelist = []
  for example in trainlist:
    for key, value in example.items():
      if (key == "Class"):
        distancelist.append({
          value: getnumdistance(testexample, example)
          })
  return distancelist

输出类似以下内容的列表:

[{'High': 5.314132102234569},
{'MidHigh': 8.029701115234614},
{'Low': 24.002408212510677},
...
{'MidHigh': 0.0}
...
{'High': 9.20044020685967},
{'LowMid': 22.120942565813056}]

我只想输出distancelist[]的最小值,因为我打算只使用最小值来检查我的knn错误率(在这种情况下为{MidHigh: 0.0})。

我计划遍历trainlist中的许多不同元素,但是我不想每次都梳理它们以尝试找到最小值。

请帮助。

2 个答案:

答案 0 :(得分:0)

my_list = [{'High': 5.314132102234569},
{'MidHigh': 8.029701115234614},
{'Low': 24.002408212510677},
{'MidHigh': 0.0},
{'High': 9.20044020685967},
{'LowMid': 22.120942565813056}]

sorted(my_list,key=lambda x:list(x.values())[0])

这将对列表进行排序。

答案 1 :(得分:0)

使用min()来查找列表的最小值,其key参数指定您需要基于什么来估计最小值:

lst = [{'High': 5.314132102234569},
{'MidHigh': 8.029701115234614},
{'Low': 24.002408212510677},
{'MidHigh': 0.0},
{'High': 9.20044020685967},
{'LowMid': 22.120942565813056}]

print(min(lst, key=lambda x: list(x.values())))
# {'MidHigh': 0.0}