【问题标题】:Python Naming Conventions for Dictionaries/Maps/Hashes字典/映射/哈希的 Python 命名约定
【发布时间】:2011-01-25 05:53:14
【问题描述】:

虽然其他问题涉及更广泛的 sequencesmodules 类别,但我要问这个非常具体的问题:

“您对字典使用什么命名约定以及为什么?”

我一直在考虑的一些命名约定示例:

# 'value' is the data type stored in the map, while 'key' is the type of key
value_for_key={key1:value1, key2,value2}
value_key={key1:value1, key2,value2}
v_value_k_key={key1:value1, key2,value2}

不要费心用“因为我的工作告诉我”来回答“为什么”,这不是很有帮助。推动选择的原因更为重要。除了可读性之外,字典命名约定还有其他好的考虑因素吗?

编辑:

选择的答案: value_key_map

选择答案的原因:让代码审查员能够快速轻松地找出地图的键和值,以及它是地图的事实,而无需查看其他任何地方。

【问题讨论】:

  • 恕我直言,许多有数学背景的人可能会觉得value_key_map 相当混乱,因为这可能表明字典将值映射到键(即倒排字典),这显然不是有意的。
  • 用 python 的说法,dict 是正确使用的术语。 (map 是函数docs.python.org/3/library/functions.html#map.)最好命名为key_value_dict,例如id_user_dictid 作为键,user 作为值。
  • 如果名称中已经存在下划线怎么办?例如item_id_name_age_map,你能猜出什么是key和value吗?

标签: python dictionary naming-conventions mapping


【解决方案1】:

key_to_value,例如surname_to_salary,当代码中有密切相关的映射时可能很有用:a 到 b、b 到 a、c 到 b 等。

【讨论】:

  • 这也是我的方法。 _to_ 命名约定很快表明它是一个字典,因此不需要 *_map。它还提供了一个很好的小微积分阅读。 apple = oranges_to_apples[my_orange].
  • 我最近遇到了一个类似的 C# 问题,an answer 建议 values_by_key 这似乎是另一个不错的选择。
  • 此处类似。但我会使用“apple_per_orange[my_orange]”或“tel_per_person[Mueller]”来代替“oranges_to_apples[my_orange]”
  • 这里似乎是少数,但例如与salary_by_surname["joe"]salary_per_surname["joe"] 相比,salary_from_joe = surname_to_salaray["joe"] 对我来说听起来不太英语。换句话说,我赞成value_by_key 而不是key_to_value
【解决方案2】:

我似乎从来没有像你提议的那样给它们命名(即保持一种方式)。当我可以找到哈希的“正确名称”时,它似乎更加清晰。它可能是“person_details”或“file_sizes”或“album_tracks”等(虽然最后两个似乎有 key_value 名称,第一个少一点)。在极少数情况下,它会是 key_value_map,如果重要的是地图,则为 value_key_map

我永远不会为此假设任何命名方案。有时价值观是你所追求的,有时是关键。我的偏好是“一个自然的名字”。

【讨论】:

  • 为什么不用key_value_map?更自然,只需在 google 中搜索“key_value_map”和“value_key_map”(带引号)即可。
  • @DSblizzard 老实说,我认为这只是偶然,因为我看到@pokstad 在他的提案中将价值列在首位——这是一些潜意识的建议。 key_value_map 可能也是我在我的代码中使用的。
【解决方案3】:

values_by_key

  1. 它不像value_key_map那么令人困惑:你不能混淆什么是 值名称和键名称是什么
  2. 不直接命名类型——python风格命名

【讨论】:

    【解决方案4】:

    我认为以 dict 中的值命名 dict 并删除任何对键的提及是有意义的。毕竟,您将在 values[key] 之类的情况下使用 dict,这可以非常清楚地说明键是什么,假设您将 key 命名为很好。

    【讨论】:

    • 这是我的第一直觉,但我觉得我的列表和字典之间的命名约定太相似了。当我回来重新访问旧代码时,我必须不断地找到初始化或按键访问的位置,以便我知道我的字典不是列表,反之亦然。
    • @pokstad:是的,我明白你在说什么。但是,如果您查看标准库,它的字典似乎仅以values 命名,而不是更罗嗦的values_key_map。例如,sys.moduleslocals()。这似乎是至少开发人员认为最好的方式。也许一些文档也会有所帮助。
    • 但是,如果您正在检查别人的代码并尝试了解字典 values 的用途是不够的。
    【解决方案5】:

    我将对比目前的许多答案(包括选择的答案)并说:

    我避免在变量名中添加像 dictmap 这样的类型引用。这对我来说太像匈牙利符号了,感觉非常反 Python。

    回答我使用什么的问题:

    我使用valuesvalues_by_keyvalues_for_key 形式的名称,以最自然的方式阅读。

    【讨论】:

      【解决方案6】:

      我通常使用 map,因为它通常是一个映射,例如字符串到函数,或数字到类,等等。未命名的字典通常以更大的结构结束,所以我不担心它们。

      【讨论】:

      • +1 我喜欢这种命名约定,因为它让您很快就知道您处理的是字典而不是列表。我唯一不喜欢的是整个单词 map 看起来有点矫枉过正,是否有一个流行的标准可以通过某种“map”的简写来实现这一点?有没有 Pythonic 的方式来提醒代码审查者该对象是一张地图?
      【解决方案7】:

      在我们的项目中,我们采用了以下约定:

      • key_to_value_map当是地图时
      • aname_dict 用于更大更复杂的结构。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-15
        • 2012-02-18
        • 1970-01-01
        • 2012-01-31
        • 1970-01-01
        • 1970-01-01
        • 2021-07-22
        相关资源
        最近更新 更多