gpt4 book ai didi

python - 对象与字典 : how to organise a data tree?

转载 作者:太空狗 更新时间:2023-10-30 00:57:34 26 4
gpt4 key购买 nike

我正在编写某种模拟程序,其数据以树的形式组织。主要对象是 World,它包含一组方法和一个 City 对象列表。每个 City 对象依次有一堆方法和一个 Population 对象列表。 Population 对象没有自己的方法,它们仅包含属性。

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

这里有几个例子可以说明我的犹豫:

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

使用数据
如果我想操纵人口数据,作为类实例比作为字典更容易。不仅语法简单,而且我还可以在编码时更好地享受内省(introspection)功能。

性能
最后,我不确定什么是最有效的资源。一个对象和一个字典最终没有什么区别,因为每个对象都有一个 __dict__ 属性,可以用来访问它的所有属性。如果我使用大量 CityPopulation 对象运行我的模拟,什么将使用较少的资源:对象还是字典?

那么,在树中组织数据的最有效方法是什么?字典还是对象更可取?或者有什么组织数据树的秘诀吗?

最佳答案

为什么不是混合 dict/object

class Population(dict):
def __getattr__(self, key):
return self[key]
def __setattr__(self, key, value):
self[key] = value

现在您可以通过属性 (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)

关于python - 对象与字典 : how to organise a data tree?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6397246/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com