Я использую defaultdicts для хранения списков значений, где keys
- это периоды, для которых значения могут быть соблюдены. Когда вы просматриваете список всех периодов интереса, я хотел бы найти ближайший период в моем defaultdict (NB: не все периоды хранятся в defaultdict).Поиск ближайшего ключа в defaultdict
Так как defaultdicts не сортируются, то нижний подход не возвращает правильное значение.
Есть ли другой способ возврата ближайшего доступного ключа для defaultdicts?
from collections import defaultdict
import numpy as np
def_dict = defaultdict(list)
# entries that will be stored in the defaultdict
reg_dict = {0: ["a", "b"], 2: ["c", "d"], 5: ["k", "h"], -3: ["i", "l"]}
# store items from regular dict in defaultdict
for k, v in reg_dict.items():
def_dict[k] = v
# Lookup periods
periods = [-1, 0, 1, 2, 3, 4, 5, 6, 7, 8]
for period in periods:
# this approach does not return the right keys as defaultdicts are not sorted
closest_key = np.abs(np.array(list(def_dict.keys())) - period).argmin()
print("period: ", period, " - looked up key: ", closest_key)
Это возвращает следующее:
period: -1 - looked up key: 0
period: 0 - looked up key: 0
period: 1 - looked up key: 0
period: 2 - looked up key: 1
period: 3 - looked up key: 1
period: 4 - looked up key: 2
period: 5 - looked up key: 2
period: 6 - looked up key: 2
period: 7 - looked up key: 2
period: 8 - looked up key: 2
1) вы на самом деле не нужен 'defaultdict',' OrderedDict' будет работать, и 2, почему вы не сортирует ключи? Можете ли вы [изменить] свой пост, чтобы показать ожидаемый результат? –
argmin возвращает ключи, чтобы результаты были правильными. используйте 'min (closeest_key)', если вы хотите значения. –