【问题标题】:Python3: Conditional extraction of keys from a dictionary with comprehensionPython3:有条件地从具有理解的字典中提取键
【发布时间】:2013-07-09 03:00:55
【问题描述】:

我需要提取值通过特定条件的字典的那些键。 基本上,我想这样做,只是以更短、更 Python 的方式:

keys=[]
for key in dict:
    if dict[key]==True:
        keys.append(key)

这是我最初的想法,但它引发了 ValueError:

[key for (key,val) in map if val==True]

我暂时想到了这个,但我不禁觉得它不是很好:

[key for key in map.keys() if map[key]==True]

有没有更简单的方法呢?也许我明显错过了一些明显的东西?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    遍历映射只会产生键。请改用map.items()

    【讨论】:

    • 问题标记为(在标题中)Python 3,因此dict.iteritems() 不存在。
    【解决方案2】:

    使用dict.items()

    [key for key, val in dct.items() if val]
    

    如果您只想获取具有 True 值的键,而不是任何真值,则可以使用相等检查:

    [key for key, val in dct.items() if val==True]
    

    PEP8 中指出,不应使用 == 比较布尔值 - 所以除非绝对需要,否则不要使用它。

    另外,请不要将变量命名为 dictmap(即使仅用于演示目的),因为它们会影响 bulitins。

    【讨论】:

      【解决方案3】:

      这是一种获取具有比推导更短和更清晰的真值的键的方法(虽然不是推导不好):

      >>> dct = {0:False, 1:True, 2:False, 3:True}
      >>> list(filter(dct.get, dct))
      [1, 3]
      >>>
      

      【讨论】:

      • 你不需要dct.keys() - 遍历字典已经产生了键。使用dct
      猜你喜欢
      • 1970-01-01
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 2020-01-28
      • 1970-01-01
      • 2015-09-26
      • 2019-01-22
      • 1970-01-01
      相关资源
      最近更新 更多