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'} |
存储在一个变量。我想删除它从数据字典.我怎么了吗?
列表有一个
江户十一〔一〕号
假设您只有两个嵌套级别,如示例中所示:
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) |
。
对于更深层次的嵌套,扩展迭代和检查包含性然后移除的思想。
如果您不知道匹配密钥(这里是
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] |
号