Помогите решить задачку со словарем

В общем, есть такой отрывок кода:

NUM = int(input())
d = {}
for i in range(NUM):
    cmd, namesp, arg = input().split()
    if cmd == 'add':
        d.setdefault(namesp, {'variables': []})['variables'].append(arg)
    elif cmd == 'create':
        d.setdefault(arg, {'variables': []})['variables'].append(namesp)
        d.setdefault(namesp, {'parent': []})['parent'].append(arg)
    else:
    
        find(namesp, arg)

и при вводе:

3

add global a

create foo global

add foo global --> здесь выдает ошибку, мол не найден ключ 'variables' хоть и стоит d.setdefault, который по идее должен создавать этот ключ, если его не существует.

Помогите, пожалуйста, найти и исправить ошибку!


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

Автор решения: GUIMish

Попробуй таким способом:

def add_to_dict(d, path, data):
    try: d[path[0]];
    except KeyError: d[path[0]] = {};
    try: d[path[0]][path[1]];
    except KeyError: d[path[0]][path[1]] = [];
    d[path[0]][path[1]].append(data);
   
NUM = int(input());
d = {};
for i in range(NUM):
    cmd, namesp, arg = str(raw_input()).split();
    if cmd == 'add':
        add_to_dict(d, [namesp, 'variables'], arg);
    elif cmd == 'create':
        add_to_dict(d, [arg, 'variables'], namesp);
        add_to_dict(d, [namesp, 'parent'], arg);
    else:
        find(namesp, arg)
→ Ссылка