1

我有以下情况:

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

                   {other dictionaries}
                   ...
                ]
        }

我有准确的字典:

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

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

4

4 回答 4

2

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

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

于 2013-09-27T16:26:36.590 回答
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
于 2013-09-27T16:36:08.673 回答
0

如果您知道它是列表的第一个元素,则可以使用del命令删除该列表的第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]
于 2013-09-27T16:34:11.373 回答
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)

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

于 2013-09-27T16:45:41.380 回答