【问题标题】:Naming nested dictionaries in python在python中命名嵌套字典
【发布时间】:2020-05-30 10:58:32
【问题描述】:

一个逻辑嵌套的结构,比如一个学生地址有一个单位号,一个楼层号(至少)。

现在一个学生有了一个名字,我们可以很容易地从一个单一的地址映射出来,例如使用this 约定:

address_to_student

equivalently:

student_by_address

student_by_address = {
    "flat 5 floor 4": "sam",
    "flat 2 floor 4": "max",
    "flat 9 floor 1": "tim",
}

为了提高效率(假设“jen”与“max”一起移动),我可能还想将地址存储为按楼层索引的字典。

基于第二个链接答案中对 _by_ 格式的极大热情,我已经同意了,但对于嵌套字典,我发现它不直观。

students_by_flat_by_floor = {
    {
        "floor 4": {
            "flat 5": ["sam"],
            "flat 2": ["max", "jen"]
        },
        "floor 1": {
            "flat 9": ["tim"]
        },
    }
}

有没有人觉得这不可读?如果这不是 python,那将是一个类。作为python,我很想避免那个样板。这就是我问这个问题的原因,替代方案是更具可读性还是 Pythonic?

floor_to_flat_to_students = ...

我对 (by) 前者的担忧是:

  1. +首先命名叶子节点,这可能是它的客户端所需要的。
  2. +到目前为止,这是我在上面针对非嵌套案例引用的 2 个问题中评分较高的答案。
  3. -感觉第一部分需要括号才能正确阅读(students_by_flat)_by_floor

还有 (to) 后者:

  1. +它与用于索引它的键的顺序相匹配。
  2. +在非嵌套情况下,上面链接,专门针对 python,这是最好的答案。
  3. -对方的长处。

【问题讨论】:

  • 结构在数据的结构中,为什么要尝试在名称中重现它?
  • 这是一个人为的示例,其中数据结构可以与命名标识符一起显示。现在假设我将它传递给许多其他只看到命名参数的函数。这使得我希望约定可以避免大量的代码阅读。也可能存在包含不同数据的类似命名的结构,例如student_by_address 可能会使用地址的某个子集,以提高效率,就像这里一样。

标签: python dictionary naming-conventions


【解决方案1】:

在没有官方指南的情况下,我将自己称为 Guido 的 PEP 8,“愚蠢的一致性是小人的妖精”

对于非嵌套字典,我更喜欢 student_by_addressto 我觉得更适合用作函数标识符的动词。

对于嵌套字典,它必须是 floor_to_flat_to_students

会接受反对的论点,但我认为这为任何考虑这些问题的人捕捉到了 Python 的精神。

【讨论】:

    猜你喜欢
    • 2020-11-12
    • 1970-01-01
    • 2016-11-08
    • 2018-05-31
    • 2017-12-11
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多