【问题标题】:Removing nested keys in Python dictionary删除 Python 字典中的嵌套键
【发布时间】:2018-07-26 05:18:41
【问题描述】:

我有一本像这样的字典:

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

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

实现此目的的正确代码是什么?

【问题讨论】:

  • 该代码没有正确缩进并且与问题相关还有很长的路要走。 SO 不是免费的编码服务。

标签: python dictionary iteration


【解决方案1】:
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'}}}

【讨论】:

    【解决方案2】:

    Python 3:

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

    Python 2:

    items 替换为iteritems

    解释:

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

    【讨论】:

      【解决方案3】:

      您可以使用嵌套的字典理解来做到这一点

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

      如果您对 k 和 v 的范围感到困惑,您可以从内部 dict 中标记它们

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

      从理解中创建新的字典可以防止对dict 的意外副作用,如使用del 的答案中所见

      【讨论】:

        【解决方案4】:

        这行得通:

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

        【讨论】:

        • 我假设您进行了复制以保留 data 的值。但是因为你修改了嵌套的字典,你也改变了data
        猜你喜欢
        • 2019-11-18
        • 2017-03-08
        • 1970-01-01
        • 2018-06-09
        • 1970-01-01
        • 2020-03-15
        • 2020-10-20
        • 2014-01-19
        相关资源
        最近更新 更多