from ast import literal_eval
import re

def str_diff_parse(str_diff):
    return [tuple(literal_eval(y) for y in re.findall(r"\[('?\w+'?)\]", x)) for x in str_diff]


added = {'root[2]': {3: {'age': 60, 'name': 'foobar'}}}
updated = {"root[1][2]['age']": {'new_value': 90, 'old_value': 40}}

list_indexes_added = str_diff_parse(added)
list_indexes_updated = str_diff_parse(updated)

print(list_indexes_added)
print(list_indexes_updated)