简体   繁体   English

删除Python字典中的嵌套键

[英]Removing nested keys in Python dictionary

I have a dictionary that looks like this: 我有一本字典,看起来像这样:

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

I need to get rid of the key 'version' and have the output like this: 我需要摆脱关键的“版本”,并获得如下输出:

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

I got the code: 我得到了代码:

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

However, this returns an empty dictionary. 但是,这将返回一个空字典。

What would be a proper code to achieve this? 什么是实现这一目标的合适代码?

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']

Result: 结果:

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

Python 3: Python 3:

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

Python 2: Python 2:

replace items with iteritems 更换itemsiteritems

Explanation: 说明:

.items() gives us an iterator over (key, value) pairs .items()为我们提供了对(键,值)对的迭代器

You can do this with a nested dict comprehension 您可以通过嵌套的dict理解来做到这一点

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

If you are confused by the scope of the k's and v's you can label the ones from the inner dict 如果您对k和v的范围感到困惑,则可以从内部dict标记它们

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

Making new dicts from comprehensions prevents accidental side-effects to dict as seen in the answers using del 从内涵作出新的类型的字典,防止意外的副作用,以dict为使用的答案看出del

This worked: 这工作:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM