【问题标题】:How can this be written on a single line?这怎么能写在一行上?
【发布时间】:2010-11-02 23:21:41
【问题描述】:

我以前见过一些 Python 列表推导,但是这可以在一行 Python 中完成吗?

errs = {}
for f in form:
    if f.errors:
        errs[f.auto_id] = f.errors

【问题讨论】:

    标签: python django dictionary list-comprehension


    【解决方案1】:
    errs = dict((f.auto_id, f.errors) for f in form if f.errors)
    

    【讨论】:

      【解决方案2】:

      Python 3.0 将 dict 理解作为 Steef 提供的分析器的更短/更易读的形式:

      errs = {f.auto_id: f.errors for f in form if f.errors}
      

      【讨论】:

        【解决方案3】:

        可能是这样,但根据“可读性很重要”。规则(PEP 20),我会说这是个坏主意。 :)

        另一方面,您有“平面优于嵌套”。和“稀疏胜于密集。”,所以我想这是一个品味问题:)

        【讨论】:

        • 来自 Haskell 背景,我更喜欢较短的。我同意你的观点,有时可读性更有价值,但在这种特殊情况下,我的眼睛因为这么简单的事情看到四行而受伤。
        • 我认为单行 dict() 版本更具可读性,因为它是自记录的——它清楚地表明它正在创建具有某些键值对的 dict。四行还不错,但要说它“只是在创建一个字典”需要更长的时间。
        【解决方案4】:

        这两种方式都非常易读,但是您应该考虑代码的未来维护者。有时明确的更好。列表推导规则虽然:)

        【讨论】:

          猜你喜欢
          • 2018-05-04
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-08-08
          • 1970-01-01
          • 2022-01-05
          • 2013-02-20
          相关资源
          最近更新 更多