【问题标题】:Spaces in Python Dictionary KeysPython 字典键中的空格
【发布时间】:2012-11-08 14:58:09
【问题描述】:

我知道 Python 字典键中可以有空格,但这被认为是糟糕的编程吗?我在 PEP 中找不到任何关于此的内容。

编辑澄清: 在我正在做的一个项目中,我正在研究解析来自 Apache 的mod_status 的记分牌输出(参见下面的示例输出。)我只是想找出最佳实践。我应该这样结束吗:

workers = {'W': 1,
           '_': 9,
           ...}

或者这个:

workers = {'Sending Reply': 1,
           'Waiting for Connection': 9,
           ...}

示例mod_status 输出:

_....___W____._.................................................
................................................................
................................................................
................................................................
Scoreboard Key:
"_" Waiting for Connection, "S" Starting up, "R" Reading Request,
"W" Sending Reply, "K" Keepalive (read), "D" DNS Lookup,
"C" Closing connection, "L" Logging, "G" Gracefully finishing,
"I" Idle cleanup of worker, "." Open slot with no current process

【问题讨论】:

  • 它只是一个容器 - 任何可散列的东西都是有效的 - 为什么 PEP8 会关注特定值?

标签: python dictionary key


【解决方案1】:

您可以使用pylint 之类的工具来检查您的代码是否与 PEP8 兼容:

所以我尝试了类似的东西:

M_D1 = {" foo bar ":1, " a bc":2, " ":3}

并且 pylint 给了我 10/10 的评分,所以我想它与键中使用的空格没有问题。

【讨论】:

  • 这个答案可能给出正确的“最终”答案(是的,字典键字符串中允许有空格),但推理不正确。字典键字符串中允许空格的原因与样式指南无关。请参阅上面 Jon Clements 的评论(带有原始问题):“[Python 字典] 只是一个容器 - 任何可散列的东西都是有效的 - 为什么 PEP8 会关注特定值?”
  • 我怎么叫 M_D1。" foo bar " ;
  • @ChrisP 使用__getitem__ 表示法:M_D1[" foo bar "]
  • @AshwiniChaudhary 是的,就是这样。这有点奇怪,因为有两个调用:a) M_D1[" foo bar "] b) M_D1.one_key。当我们不能使用第二个时,我们可以使用第一个。
【解决方案2】:

您可能会想到 Javascript,您可以在其中使用 obj.fooobj['foo'] 的键来引用对象。在这种情况下,空格可能被认为是错误的形式,因为第一个版本不起作用:Python 一开始就没有这个选项,所以这个问题不会出现。

【讨论】:

    【解决方案3】:

    如果您的键是字符串,它们可能包含任何内容。

    他们应该代表什么?举个例子吧。

    【讨论】:

    • 我添加了说明。这不是功能问题,而是最佳实践/风格问题。
    【解决方案4】:

    您的密钥可以是您想要的任何(字符串)。如果您将它们用于内部的东西 - 空间可能不是最好的主意。否则 - 好的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2021-03-22
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      相关资源
      最近更新 更多