Как получить более одного наименьшего / наибольшего значения словаря? - PullRequest
0 голосов
/ 15 октября 2018

Например, если я создаю словарь, используя следующий скрипт:

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 голосов
/ 15 октября 2018

Просто используйте 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]]
0 голосов
/ 15 октября 2018

Вы можете использовать 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 ) для решений, требующих полной сортировки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...