【问题标题】:How to make nested dict comprehensions in python如何在python中进行嵌套的dict理解
【发布时间】:2016-05-10 05:06:14
【问题描述】:

我有双 for 循环,我想将其重新格式化为 dict 理解:

tests = {'var1': {'L': True, 'C': True},
         'var2': {'L': False, 'C': True},
         'var3': {'L': False, 'C': False}}

for feat, tags in tests.iteritems():
    for name, value in tags.iteritems():
        if value is True:
            print '{}, {}'.format(name, feat))
            obj = create_obj(type=name)
            run_method(feat, obj)

应该很容易吧?

【问题讨论】:

  • 你不是在创建一个新的字典;这里没有用 dict 理解。
  • 我明白了,所以我误解了列表/字典的理解,但如果我只留下打印声明,它就像@Kasramvd 提到的那样工作。

标签: python dictionary nested dictionary-comprehension


【解决方案1】:

由于您正在打印一个字符串,您可以使用如下列表推导:

['{}, {}'.format(name, feat) for feat, tags in tests.iteritems() for name, value in tags.iteritems() if value]

如果你想从 namefeat 创建一个键值对,你可以使用字典推导:

{name:feat for feat, tags in tests.iteritems() for name, value in tags.iteritems() if value}

【讨论】:

  • 如果我想执行一些方法而不是打印:run_method(name, value)?
  • @emcek 执行某些方法是什么意思?它返回任何东西吗?如果它返回一个值,您可以将 '{}, {}'.format(name, feat) 替换为您的已被称为 (my_attr()) 的属性,如果不是,则为无。
猜你喜欢
  • 2021-06-18
  • 2017-12-28
  • 2018-09-07
  • 2021-05-15
  • 2017-03-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 2014-10-25
相关资源
最近更新 更多