【发布时间】:2020-05-30 10:58:32
【问题描述】:
一个逻辑嵌套的结构,比如一个学生地址有一个单位号,一个楼层号(至少)。
现在一个学生有了一个名字,我们可以很容易地从一个单一的地址映射出来,例如使用this 约定:
address_to_student
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) 前者的担忧是:
- +首先命名叶子节点,这可能是它的客户端所需要的。
- +到目前为止,这是我在上面针对非嵌套案例引用的 2 个问题中评分较高的答案。
- -感觉第一部分需要括号才能正确阅读(students_by_flat)_by_floor
还有 (to) 后者:
- +它与用于索引它的键的顺序相匹配。
- +在非嵌套情况下,上面链接,专门针对 python,这是最好的答案。
- -对方的长处。
【问题讨论】:
-
结构在数据的结构中,为什么要尝试在名称中重现它?
-
这是一个人为的示例,其中数据结构可以与命名标识符一起显示。现在假设我将它传递给许多其他只看到命名参数的函数。这使得我希望约定可以避免大量的代码阅读。也可能存在包含不同数据的类似命名的结构,例如
student_by_address可能会使用地址的某个子集,以提高效率,就像这里一样。
标签: python dictionary naming-conventions