对象与字典:如何组织数据树?

Ben*_*min 5 python tree resources dictionary object

我正在编程某种模拟,其数据在树中组织.主要对象World包含一堆方法和一个City对象列表.每个City对象又有一堆方法和一个Population对象列表.Population对象没有自己的方法,它们只包含属性.

我的问题是关于后面的Population对象,我可以从中衍生出来object或创建为字典.组织这些的最有效方法是什么?

这几个案例说明了我的犹豫:

保存数据
我需要能够保存和加载模拟,为此我使用内置的json(我希望数据是人类可读的).由于程序是在树中组织的,因此在每个级别保存数据可能很麻烦.在这种情况下,群体最好作为附加到population列表的字典保存为City实例的属性.这样,保存只是将City实例传递给__dict__Json.

使用数据
如果我想操纵填充数据,它作为类实例比作为字典更容易.不仅语法简单,而且我还可以在编码时更好地享受内省特征.

性能
我最后不确定什么是最有效的资源.对象和字典最后几乎没有区别,因为每个对象都有一个__dict__属性,可用于访问其所有属性.如果我有大量的运行我的模拟CityPopulation对象,会是怎样用更少的资源:对象或字典?

那么,在树中组织数据的最有效方法是什么?字典或对象更受欢迎吗?或者组织数据树有什么秘密吗?

kin*_*all 2

为什么不是混合体dict/ object

class Population(dict):
    def __getattr__(self, key):
        return self[key]
    def __setattr__(self, key, value):
        self[key] = value
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过属性 ( foo.bar) 轻松访问已知名称,同时仍然具有dict轻松访问未知名称、迭代它们等的功能,而无需使用笨重的getattr/setattr语法。

如果您希望始终使用特定字段初始化它们,您可以添加一个__init__方法:

def __init__(self, starting=0, birthrate=100, imrate=10, emrate=10, deathrate=100):
     self.update(n=starting, b=birthrate, i=imrate, e=emrate, d=deathrate)
Run Code Online (Sandbox Code Playgroud)