复杂的嵌套列表理解,PEP8

complex nested list comprehensions, PEP8

假设我有这样的代码:

questions = [{
    "title": q.title,
    "votes": q.get_total_votes(),
    "options": [{
        "title": o.title,
        "votes": o.votes
    } for o in q.get_options()]
} for q in queue.get_questions()]

但是大多数 PEP8 例子都说我应该这样写:

questions = [{"title": q.title,
              "votes": q.get_total_votes(),
              "options": [{"title": o.title, "votes": o.votes}
                          for o in q.get_options()]}
             for q in queue.get_questions()]

第二个版本是否更可取/更具可读性?或者也许列表推导不是最好的方法,我应该做 plain

questions = []
for q in queue.get_questions():
    options = []
    for o in q.get_options():
        options.append({"title": o.title, "votes": o.votes})
    questions.append({"title": q.title,
                      "votes": q.get_total_votes(),
                      "options": options})

我会这样写,我认为它更具可读性:

questions = [{"title": q.title,
              "votes": q.get_total_votes(),
              "options": [{"title": o.title, "votes": o.votes}
                            for o in q.get_options()]}
            for q in queue.get_questions()]

PEP8方式最好,不仅可读性强,而且以后修改也很方便。第一种方法也可读但不是很好,因为不是所有的键都排列得很好,你必须使用 Tab 键嵌套你的选项键,另外如果你使用较小的终端查看它(如果你使用 vim 或任何终端编辑器)那么它会很烦人。不过只是我的想法。