如何获得一个字典的多个最小/最大值?

时间:2018-10-15 17:04:48

标签: python python-2.7 sorting dictionary

就像我使用以下脚本创建字典一样:

r_lst = {}
for z in df.index:
  t = x.loc[0, 'sn']
  s = df.loc[z, 'rv']
  slope, intercept, r_value, p_value, std_err = stats.linregress(t,s)
  r_lst.setdefault(float(z),[]).append(float(r_value))

结果字典像这样

{4050.32: [0.29174641574734467],
 4208.98: [0.20938901991887324],
 4374.94: [0.2812420188097632],
 4379.74: [0.28958742731611586],
 4398.01: [0.3309140298947313],
 4502.21: [0.28702220304639836],
 4508.28: [0.2170363811575936],
 4512.99: [0.29080133884942105]}

现在,如果我想查找字典的最小或最大值,则只需使用此简单命令min(r_lst.values())max(r_lst.values())

如果我想要三个最低值或三个最高值怎么办?那我该怎么办呢?我在这里看到了一些问题,但没有一个回答我的要求。

2 个答案:

答案 0 :(得分:2)

只需使用sorted()

sorted(r_lst.values())

或以相反的顺序:

sorted(r_lst.values(), reverse=True)

因此要获得3个最大值:

sorted(r_lst.values(), reverse=True)[:3]

收益:

[[0.3309140298947313], [0.29174641574734467], [0.29080133884942105]]

答案 1 :(得分:1)

您可以使用heapq.nsmallest / heapq.nlargest

import heapq

res = heapq.nsmallest(3, d.values())

# [[0.20938901991887324], [0.2170363811575936], [0.2812420188097632]]

要提取为平面列表,可以使用itertools.chain

from itertools import chain
import heapq

res = list(chain.from_iterable(heapq.nsmallest(3, d.values())))

# [0.20938901991887324, 0.2170363811575936, 0.2812420188097632]

这些heapq解决方案的时间复杂度为O(( n - k )* log n )vs O(< em> n 登录 n )以获取需要完整排序的解决方案。