【问题标题】:Python how to organise data instead of nested dictionaries and listsPython如何组织数据而不是嵌套的字典和列表
【发布时间】:2019-11-26 18:13:27
【问题描述】:

我已经阅读了很多关于嵌套字典和列表的 SO 帖子(例如 Object vs. Dictionary: how to organise a data tree?),但我仍然不明白何时选择不同的数据结构。

我经常发现自己开始使用例如列表字典进行编程,然后哦,我需要添加其他内容,让列表中的每个值成为一个元组,然后还有其他内容......很快它就会很深嵌套列表和字典的科学怪人。

然后我尝试花更多时间尝试使用 cmets 记录数据结构,然后实际对其进行编码。我也仍然认为下一个程序员很难上手和使用。好像我只是让一切变得复杂。在这一点上,我考虑制作课程来处理它。只有属性的类似乎并不理想。

这是一个基本的例子:

dict = {
    heading1 : [
        (value1, id1), (value2, id2)
    ],
    heading2 : [
        (value3, id3), (value4, id4)
    ],
}

如何对上述数据结构进行编码,使其更易于理解和维护?

【问题讨论】:

  • 你需要类——它们的属性可以是你想要的任何类型,包括嵌套的字典或列表。属性也可以是其他自定义类的实例。比您拥有的值是元组列表的字典要容易得多。
  • 像这样的一般设计问题并不适合Stack Overflow。它更接近于 Software Engineering 的主题,但您可能需要就为什么一种设计优于另一种设计提出更具体的问题,而不是提出广泛的建议。
  • @run_the_race,让我向你介绍namedtuple,你最好的新朋友。
  • 我现在已经了解了命名元组,它们对代码的可读性很有帮助。但是,它们的缺点是搜索它们的列表。例如。命名元组的列表并尝试查找其列是特定值的元组。

标签: python dictionary


【解决方案1】:

包含元组列表的复杂字典可以用对象替换。

dict = {
    heading1 : [
        (value1, id1), (value2, id2)
    ],
    heading2 : [
        (value3, id3), (value4, id4)
    ],
}

相反,您可以尝试以下方法。这不是一个很好的例子,但可以说明它是如何工作的。

class Thing:
    headings = [] # This will be a list of Headings

class Heading:
    values = [] # This will be a list of values, of whatever type you need (e.g. string)

像这样使用它:

heading = Heading()
heading.values.append("Test value")

thing = Thing()
thing.headings.append(heading)

print(thing.headings[0].values[0]) # Prints "Test value"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 2021-05-10
    • 2019-06-13
    • 2022-08-16
    • 2021-06-11
    相关资源
    最近更新 更多