关于列表:Python:深度嵌套的字典编辑

Python: Deeply nested dictionary editing

本问题已经有最佳答案,请猛点这里访问。

我有以下的情况:

1
2
3
4
5
6
7
8
9
data = {'key1' : 'value1',
       'key2': [
                   {'subkey1': 'subvalue1',
                    'subkey2': 'subvalue2'},

                   {other dictionaries}
                   ...
                ]
        }

我有确切的字典:

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

存储在一个变量。我想删除它从数据字典.我怎么了吗?


列表有一个remove方法,因此如果您知道键

江户十一〔一〕号


假设您只有两个嵌套级别,如示例中所示:

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

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


如果您不知道匹配密钥(这里是'key2'),可以使用:

1
2
3
4
5
6
7
8
9
exact_dict = {'subkey1': 'subvalue1',
              'subkey2': 'subvalue2'}

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

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

如果不知道列表中的元素是什么,可以迭代列表查找要删除的元素,或者使用列表理解来删除元素。

迭代的伪代码如下:

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

列表理解可能如下所示:

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