Уведомления

Группа в Telegram: @pythonsu

#1 Авг. 15, 2012 16:26:41

xost
От:
Зарегистрирован: 2009-08-26
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

Удаление данных из вложеного словаря

Добрый всем день.

Вопрос такой. Есть вложенный словарь, например:

d={'a':{'aa':[1,2,3],'bb':[3,4,5]},'b':{'aa':[5,6,7],'bb':[7,8,9]}}
есть список “ключей”, например
keys=['a','bb']
и значение, например
 val=4
из сушествуещего словаря надо удалить это значение, т.е.
d['a']['bb'].remove(4)
либо
keys=['a'], val='aa'
, т.е. надо сделать.
del d['a']['aa']
Хочется автоматизировать эту процедуру, быть может кто наведёт на мысли ?
Заранее спасибо.



Отредактировано xost (Авг. 15, 2012 16:37:33)

Офлайн

#2 Авг. 15, 2012 17:15:27

EBFE
Зарегистрирован: 2012-07-03
Сообщения: 99
Репутация: +  20  -
Профиль   Отправить e-mail  

Удаление данных из вложеного словаря

d={'a':{'aa':[1,2,3],'bb':[3,4,5]},'b':{'aa':[5,6,7],'bb':[7,8,9]}}
keys=[['a','bb'],['a']]
vals = [4,'aa']
key_val_pairs = zip(keys, vals)
for key_list,val in key_val_pairs:
    inner_elem = d
    for key in key_list:
        inner_elem = inner_elem[key]
    if isinstance(inner_elem, list):
        inner_elem.remove(val)
    else:
        del(inner_elem[val])
>>> d
{'a': {'bb': [3, 5]}, 'b': {'aa': [5, 6, 7], 'bb': [7, 8, 9]}}

Отредактировано EBFE (Авг. 15, 2012 17:16:13)

Офлайн

#3 Авг. 15, 2012 17:38:26

fata1ex
От:
Зарегистрирован: 2009-07-11
Сообщения: 732
Репутация: +  52  -
Профиль   Отправить e-mail  

Удаление данных из вложеного словаря

data = [[['a', 'bb'], 4], [['a'], 'aa']]
 
def remove_from_dict(dictionary, keys, value):
    if keys:
        remove_from_dict(dictionary[keys[0]], keys[1:], value)
    else:
        if isinstance(dictionary, dict):
            del dictionary[value]
        else:
            dictionary.remove(value)
        
for removal_data in data:
    remove_from_dict(d, *removal_data)



Отредактировано fata1ex (Авг. 15, 2012 17:41:43)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version