これは、すでに推奨されている@Rory Daultonのようにheapq
モジュールを使用したちょっとした例です。これは、削除された項目のインデックスの優先度キューをfree
という名前のリストに維持します。新しいアイテムが追加されると、可能な限りそれらを再利用します。
空きインデックスがない場合でもアイテムを追加できるようにするため、使用されていない最高のインデックスを別の変数next-index
で追跡します。この値は再利用するインデックスがなく、まったく使用されていない新しいものが必要な場合に使用します。
import heapq
example = {1: 'data1',
2: 'data2',
3: 'data3',
4: 'data4',
5: 'data5'}
free = []
next_index = max(example.keys()) + 1
def remove_item(d, index):
del d[index]
heapq.heappush(free, index)
def add_item(d, data):
global next_index
try:
index = heapq.heappop(free)
except IndexError:
index = next_index
next_index += 1
d[index] = data
remove_item(example, 2)
remove_item(example, 5)
add_item(example, 'data6')
add_item(example, 'data7')
add_item(example, 'data8')
print(example)
出力:dictのサブクラスで応答@rorydaulton後
{1: 'data1', 2: 'data6', 3: 'data3', 4: 'data4', 5: 'data7', 6: 'data8'}
を行うことができ、することができますあなたはnullまたは空の文字列に値を設定してからhaあなたの状態に最初に遭遇したときに新しい値を挿入する単純なループ? –
@SergChernataそれはまだ私の友人の線形検索です。 – Rockybilly
あなたはそのような操作をスレッドセーフな/再入可能にすることは王権の痛みでしょうか? – ShadowRanger