2013-09-27 3 views
0

У меня следующая ситуация:Python: глубоко вложенный словарь редактирование

data = {'key1' : 'value1', 
     'key2': [ 
        {'subkey1': 'subvalue1', 
        'subkey2': 'subvalue2'}, 

        {other dictionaries} 
        ... 
       ] 
     } 

У меня есть точный словарь:

{'subkey1': 'subvalue1', 'subkey2': 'subvalue2'} 

хранится в переменном. Я хотел бы удалить его из data dict. Как я могу это сделать?

+4

не называть словарь 'dict' –

+0

@ user2799617 отредактировал –

ответ

2

списки есть метод remove, так что если вы знаете, ключ

data['key2'].remove({'subkey1': 'subvalue1', 'subkey2': 'subvalue2'})

0

Если вы знаете, что это первый элемент списка, вы можете изменить значение дель команду, чтобы удалить -й элемент этого списка.

Если вы не знаете, какой элемент в списке он есть, вы можете перебирать список, ищущий элемент, который хотите удалить, или вы можете использовать понимание списка для удаления элемента.

Псевдо-код для итерации будет идти что-то вроде:

for each element in the list I want to iterate: 
    if this element is the one I want to delete: 
    delete(element) 

список понимание может быть что-то вроде следующего:

dict['key2'] = [i for i in dict['key2'] if i != THE_ELEMENT_YOU_WANT_TO_DELETE] 
0

Если вы не знаете, ключ соответствия (здесь 'key2'), вы можете использовать:

exact_dict = {'subkey1': 'subvalue1', 
       'subkey2': 'subvalue2'} 

for val in data.itervalues(): 
    try: 
     if exact_dict in val: 
      val.remove(exact_dict) 
    except TypeError: 
     pass 
0

Предполагая, что у вас есть только два уровня гнездования, как указано в вашем примере:

for key in data.keys(): 
    if type(data[key])==type(list()): 
    if item_to_del in data[key]: 
     data[key].remove(item_to_del) 

Для более глубокого уровня вложенности, расширить эту идею и итерации проверки сдерживания последующего удаления.

Смежные вопросы