【问题标题】:how to exclude inner dictionary key inside a nested dictionary using a dict comprehension?如何使用字典理解排除嵌套字典中的内部字典键?
【发布时间】:2021-09-18 21:49:27
【问题描述】:

我有这本词典:

params = {'H': {'amt_thold_high': 0.0, 'amt_thold_restricted': 0.0, 'num_par': 2.0, 'version': 2.1},
          'M': {'amt_thold_high': 0.0, 'amt_thold_restricted': 0.0, 'num_par': 2.0},
          'L': {'amt_thold_high': 0.0, 'amt_thold_restricted': 0.0, 'num_par': 2.0}}

我想从第一个外部键 H 中返回完全相同的字典,不包括内部 k version

这是我到目前为止所带来的:

{outer_k:outer_v for outer_k,outer_v in params.items() for inner_k, inner_v in outer_v.items() if inner_k != 'version'}

这是我得到的结果:

{'H': {'amt_thold_high': 0.0,
  'amt_thold_restricted': 0.0,
  'num_par': 2.0,
  'version': 2.1},
 'M': {'amt_thold_high': 0.0, 'amt_thold_restricted': 0.0, 'num_par': 2.0},
 'L': {'amt_thold_high': 0.0, 'amt_thold_restricted': 0.0, 'num_par': 2.0}}

为什么我的解决方案不起作用,我如何使用 dict 理解来实现我的目标?

【问题讨论】:

  • 也许更快:for k, v in params.items(): if v.get('version'): v.pop('version')

标签: python python-3.x loops dictionary dictionary-comprehension


【解决方案1】:

你必须嵌套理解

{outer_k: {inner_k: inner_v 
           for inner_k, inner_v in outer_v.items() if inner_k != 'version'} 
 for outer_k, outer_v in params.items()}

并将条件应用于内部dict

【讨论】:

  • 非常感谢!!我没有那样想。这很聪明:)
  • 是的,您为每个外部/内部组合重复了 sameouter_k、outer_v 项(过滤后的组合除外)。所以你最终会抓住所有内部键。
  • 非常感谢您的解释,我知道我做错了,但我无法弄清楚错误在哪里
  • @Miguel2488 因为答案解决了您的问题,请接受它 - 请参阅What should I do when someone answers my question?
猜你喜欢
  • 1970-01-01
  • 2021-07-24
  • 2019-09-17
  • 2020-12-15
  • 2020-10-20
  • 2017-11-27
  • 2013-11-30
  • 2016-11-25
  • 2016-12-31
相关资源
最近更新 更多