replacements = {'a': '1', 'b':'2', ...}
Когда мы отправляем оригинальную переменную в функцию, создаётся её копия
def test(value: list):
value.append(1)
a = [0]
test(a)
print(a) # [0, 1]
try:
...
except Exception as err:
print("ERROR:", err)
else:
print("No error")
попробуй указать это свойство при отправке сообщения, параметром entities = message.caption_entities
Т.е. план будет
1. прочитать текущую структуру данных
2. изменить её, как тебе надо
3. записать её обратно.
Единственное преимущество в таком сценарии - относительная человекочитаемость файла (если настроить json.dump() как надо). Т.е. это лучше работает для файлов конфигурации.
Если она для тебя не важна, а нужны частые модификации - либо изобретай свой формат, либо осваивай модуль sqlite.