私は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(closest_key)'を使います。 –