什么是系统多维(嵌套)阵列的PEP8标准?

时间:2015-05-17 02:46:18

标签: python list dictionary tuples pep8

系统多维(嵌套)数组的PEP8标准是什么?

有许多方法可以在Python中构建数据,下面给出了一些示例。显然,最好的'方法是满足您需求的方法,即使我们已经看到了我们在“草率”中的份额。数据结构。但是,是否有一种系统的方法来实际构建作为标准建立的数据?

例如,由不明确的[list] /(元组)填充的字典:

# print John's grade
students = {'John':['1','7'],'Kate':['PreK','4']}
print(students['John'][0])

或者由字典填充的稍微不那么含糊的字典:

# print Kate's grade
students = {'John':{'grade':'1','age':'7'},'Kate':{'grade':'PreK','age':'4'}}
print(students['Kate']['grade'])

另一种可能的方法是使用类创建自己的数据类型和结构:

class timeZone:
    def __init__(self, zone_code, city, offset):
        self.zone_code = zone_code
        self.city = city
        self.offset = offset
        self.DST_offset = DST_offset

Z = timeZone('Z','Zulu Time',int(0))
Y = timeZone('Y','Fiji',int(-12))
X = timeZone('X','American Samoa',int(-11))
W = timeZone('W','Honolulu, HI',int(-10))
V = timeZone('V','Juneau, AK',int(-9))

或者还有其他最好的方法/库吗?

2 个答案:

答案 0 :(得分:1)

一般来说,Python建议清晰度显式编码。在你的第一个例子中,列表中值的含义确实不明确,所以我不推荐它。

现在,由于其他一些更重要的原因,您有时可能希望编写此类代码。我会说:始终尽可能明确,以便轻松看到数据的含义

现在,可以通过多种方式明确指出数据的含义:

  • 通过一个包含类和年龄的高效collections.namedtuple(这样可以更有效地将相同的内容存储在字典中,并且由于像.age这样的属性访问,它可以更高效。
  • 通过一个将每个学生与班级和年龄栏相关联的pandas数据框。
  • 通过NumPy记录数组:您将学生的姓名,班级和年龄存储为一维数组中的记录(但是如果给出一个名称,则必须通过整个数组才能找到它,因此这种方法可能不会适合您的特定应用。)

答案 1 :(得分:-1)

这不是关于pythonic或最佳实践,而是你真正需要的。

如果您需要更明确,第二种解决方案更好。但是,如果您需要将所有值作为一个整体传递给类似

的函数
str.format()

您可能更喜欢第一个,因为您可以def foo(grade, age, sex, height, ...): 来节省您的时间。