Помогите решить задачку со словарем
В общем, есть такой отрывок кода:
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)