Python:深度嵌套的字典编辑

时间:2013-09-27 16:20:11

标签: python list dictionary editing

我有以下情况:

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

                   {other dictionaries}
                   ...
                ]
        }

我有确切的词典:

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

存储在变量中。我想从数据字典中删除它。我怎么能这样做?

4 个答案:

答案 0 :(得分:2)

列表有一个remove方法,所以如果你知道密钥

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

答案 1 :(得分:0)

如果您知道它是列表的第一个元素,您可以使用 del 命令删除该列表的 0 元素。< / p>

如果您不知道列表中的哪个元素,您可以迭代列表以查找要删除的元素,或者您可以使用列表推导来删除元素。

迭代的伪代码类似于:

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]

答案 2 :(得分: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

答案 3 :(得分: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)

对于更深层次的嵌套,请扩展迭代和检查包含然后删除的想法。