Estoy programando algún tipo de simulación con sus datos organizados en un árbol. El objeto principal es World
que contiene un conjunto de métodos y una lista de objetos City
. Cada objeto City
a su vez tiene un montón de métodos y una lista de objetos Population
. Population
los objetos no tienen ningún método propio, solo tienen atributos.Objeto vs. Diccionario: ¿cómo organizar un árbol de datos?
Mi pregunta se refiere a los últimos Population
objetos, que puedo derivar de object
o crear como diccionarios. ¿Cuál es la forma más eficiente de organizar estos?
Éstos son algunos casos que ilustran mi duda:
almacenamiento de los datos
tengo que ser capaz de guardar y cargar la simulación, para lo cual se utilizo el built-in json (Quiero que los datos sean humano legible). Debido a que el programa está organizado en un árbol, guardar datos en cada nivel puede ser engorroso. En este caso, la población se conserva mejor como un diccionario adjunto a una lista population
como un atributo de una instancia City
. De esta manera, el ahorro es una mera cuestión de pasar el City
instancia de __dict__
en Json.
Utilizando los datos
Si quiero manipular los datos de la población, es más fácil que una instancia de clase que como un diccionario. No solo es simple la sintaxis, sino que también puedo disfrutar mejor de las funciones de introspección durante la codificación.
Rendimiento
No estoy seguro, por último, en cuanto a lo que es el más eficiente en términos de recursos. Un objeto y un diccionario tienen poca diferencia al final, ya que cada objeto tiene un atributo __dict__
, que se puede usar para acceder a todos sus atributos. Si ejecuto mi simulación con un gran número de objetos City
y Population
, ¿qué utilizará menos recursos: objetos o diccionarios?
De nuevo, ¿cuál es la forma más eficiente de organizar datos en un árbol? ¿Son preferibles los diccionarios u objetos? ¿O hay algún secreto para organizar los árboles de datos?
'namedtuple' es, por desgracia, inmutable. – delnan
Vaya, por supuesto. – kindall
y ahora tiene un objeto similar a Javascript, con una función de acceso bidireccional innecesaria. "Debería haber una, y preferiblemente solo una, forma obvia de hacerlo". – Simon