删除Python字典中的嵌套键

时间:2018-07-26 05:18:41

标签: python dictionary iteration

我有一本看起来像这样的字典:

data = {'a1': {'version': '1',
               'results': {'key':'value'}
              },
        'a2': {'version': '1', 
               'results': {'key':'value'}
              }
       }

我需要摆脱键“版本”,并获得如下输出:

{'a1': {'results': {'key':'value'}},
 'a2': {'results': {'key':'value'}},
...

我得到了代码:

data2 = {}
for k, v in data:
    if k == 'version':
    data2[k] = None

但是,这将返回一个空字典。

什么是实现此目的的合适代码?

4 个答案:

答案 0 :(得分:2)

data = {'a1': {'version': '1',
               'results': {'key':'value'}
              },
        'a2': {'version': '1', 
               'results': {'key':'value'}
              }
       }

for inner_dict_key in data:
    if 'version' in  data[inner_dict_key]:
        del data[inner_dict_key]['version']

结果:

{'a1': {'results': {'key': 'value'}}, 'a2': {'results': {'key': 'value'}}}

答案 1 :(得分:1)

Python 3:

data2 = {k: {'results': v['results']} for k, v in data.items()}

Python 2:

items替换为iteritems

说明:

.items()为我们提供了对(键,值)对的迭代器

答案 2 :(得分:1)

您可以通过嵌套的dict理解来做到这一点

data2 = {k: {k: v for k, v in v.items() if k != 'version'} for k, v in data.items()}

如果您对k和v的范围感到困惑,则可以从内部字典中标注它们。

data2 = {k: {k1: v1 for k1, v1 in v.items() if k1 != 'version'} for k, v in data.items()}

从理解上做出新的决定可以防止dict的意外副作用,如使用del的答案所示

答案 3 :(得分:0)

这有效:

data2 = data.copy()
for k in data:
   if 'version' in data[k]:
       del data2[k]['version']
print(data2)