Как в питон удалить элемент словаря, сдвинув при этом остальные элементы, следующие за удалённым элементом?

У меня возникла проблема во время написания программы на питон, при реализации функции удаления артикула в словаре образуется пустое место, т.е. в словаре появляется разрыв индексов и перебрать словарь по ключам не получается:

{'a1': 'AE1016000|',
 'a2': 'AE1016001|',
 'a3': 'AE1016002|',
 'a4': 'AE1016003|',
 'a6': 'AE1016007|',
 'a7': 'AE1024000|',
 'a8': 'AE1024001|'}

Как можно реализовать удаление артикула с последующим сдвигом всех элементов следующих за удалённым на один? Я пользовался стандартной функцией pop и удалял значение по известному ключу


Ответы (2 шт):

Автор решения: Vad Sim

Ваша проблема решается большим и непонятным куском кода:

def remove_and_offset(dictionary:dict, n:int):
    keyID = f"a{n}"
    maxID = max(dictionary,
                key=lambda e: int(e[1:]))
    for i in range(n, int(maxID[1:]) + 1):
        key = f"a{i}"
        if key in dictionary:
            e = dictionary.pop(key)
            dictionary[f"a{i-1}"] = e
    return dictionary

И ещё: в комментариях было сказано, что здесь списком куда удобнее. Чем он вам не угодил?

→ Ссылка
Автор решения: Just_a_programmer
def remove_and_offset(dictionary, n):
    keyID = f"a{n}"
    maxID = max(dictionary,
                key=lambda e: int(e[1:]))
    res = dictionary.pop(keyID)
    for i in range(n, int(maxID[1:]) + 1):
        key = f"a{i}"
        if key in dictionary:
            e = dictionary.pop(key)
            dictionary[f"a{i-1}"] = e
    return dictionary

Вот так выглядит конечный вариант функции, я отправил запрос на редактирование предыдущего ответа, но правки пока не одобрены, поэтому публикую сюда.

→ Ссылка