Python 而非 PEP8 中的字典理解

Dict comprehension in Python not PEP8

我的 Python 2.7 的 Sublime Linter 报告说这一行不是 PEP8:

D = {k:get_distance(v) for k, v in D.items() if len(v) > 1}

在第 8 列和 27

但是当我在冒号 (:) 后插入一个 space 时,我在 Sublime 中得到一个红色感叹号。

如何使此行 PEP8 兼容?

更新

Sublime Text 2.0.2,内部版本 2221; 崇高短绒 v1.8 ; Python PEP8 Lint v2013.10.11.06

代码可以正常运行并生成无错误的输出

D = {k: get_distance(v) for k, v in D.items() if len(v) > 1}

这不是语法错误,而是正确的 PEP8 写法。检查你那里没有任何隐藏的 unicode 字符。

:之后插入一个space;这仍然有效 Python 语法:

D = {k: get_distance(v) for k, v in D.items() if len(v) > 1}

如果您遇到语法错误,那是您在其他地方引入的。例如,您可能忘记关闭前一行的 ) 括号。

请注意,使用大写字母作为局部变量不符合 PEP-8 标准。为局部变量选择更好的 lowercase_with_underscores 名称:

def solution(seq):
    positions = defaultdict(list)
    for i, item in enumerate(seq):
        positions[item].append(i)
    distances = {k: get_distance(v) for k, v in positions.items() if len(v) > 1}
    return max(distances.value()) if distances else 0

最后但并非最不重要的; positions 字典中的索引是 有序的 (递增),因此 get_distance() 应该 return l[-1] - l[0] 使其成为 return O(1) 常数时间内的距离。