[英]How to get more than one smallest /largest values of a 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())
。
如果我要三個最低值或三個最高值怎么辦? 那我該怎么辦呢? 我在這里看到了一些問題,但沒有一個回答我的要求。
只需使用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]]
您可以使用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 )與O( n log n )。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.