Изменение пары в словаре через функцию

Нужно изменить пару в словаре (ключ, значение) на новые, используя функцию. Я так понял, что готового метода не существует, а ключ вообще менять нельзя.

Попробовал так:

d = {'a': 'hello', 'b': 'world'}
def change_d(par):
    del d[par]
    new_k = input("new key")
    new_v = input("new value")
    new_par = {new_k: new_v}
    d.update(new_par)
change_d("b")
print(d)

Проблема в том, что новая пара добавляется в конец, а нужно чтобы она была на том месте, где находилась предыдущая.


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

Автор решения: 宏zxc god宏︎

Это сделать невозможно используя быстрый алгоритм, так как при добавлении объектов в словарь индекс ему дается автоматически и логично что менять его нельзя, иначе это ухудшит оптимизацию и приведет к образованию коллизий. Да и вообще то что вы видите при print(d) это не их позиции! Потому что объекты в ней не упорядочены. Так что получается что по сути не имеет смысла менять их местами (поэтому и не предусмотрена, например возможность сортировать объекты в ней, как в списках).

Единственный способ это пересоздавать эти словари и добавлять объекты в нужном вам порядке, но при большом объеме это может занять очень много времени. Или если уж сильно важен визуал и чтобы объекты "находились" именно там где вам нравятся, то словарь можно преобразовать в список, удалять объект .remove(index) и заново добавлять его .insert(index) под указанный индекс. Надеюсь смог помочь)

→ Ссылка