J'écris une chose de type octree en Python, et actuellement tout ce qu'il est capable de stocker est un ID. Cependant, je voudrais le changer afin qu'il puisse stocker un certain nombre de choses, et je ne suis pas sûr de savoir quelle serait la meilleure façon de prendre en compte cela pourrait être pour des milliers de valeurs. Si vous ajoutez des éléments au code, est-ce que le stockage en tant que liste normale sera correct et que le code sera dur dans les index, ou serait-il préférable de stocker en tant que dictionnaire pour obtenir les valeurs souhaitées?Vaut-il mieux stocker des valeurs de dictionnaire avec plusieurs éléments sous forme de listes ou de dictionnaires?
=[ID, stuff1, stuff2...]
={'ID': num, 'stuff1': something, 'stuff2': something}
Si vous voulez que l'ID de la première façon, vous utilisez voxel_info[0]
, mais comme vous ajoutez plus de valeurs, il peut devenir plus compliqué, comme owner = voxel_info[4]; importantText = voxel_info[5]
(où vous devez vous rappeler quel index se rapporte à quoi à tous les points dans le code), ou avec le dictionnaire, il serait beaucoup plus facile d'obtenir les valeurs si plus de choses ont été ajoutées. Le chemin du dictionnaire semble plus utilisable, mais il semble également que cela ralentisse le code et utilise plus de mémoire car il stocke des clés de texte pour des milliers de dictionnaires. De quelle façon recommanderiez-vous probablement?
Pour une idée de la façon dont les données sont stockées, c'est comme ça. Les éléments seront groupés si toutes les informations de bloc sont identiques, ainsi vous obtenez les différentes profondeurs. La partie BLOCKINFO
est l'endroit où l'information est stockée, ce que je demande d'être une liste ou un dictionnaire.
OctreeData={ Depth: 2
Nodes: (1,1,1): {Depth:1
Nodes: (1,1,1): BLOCKINFO
(1,1,-1): {Depth: 0
Nodes: (1,1,1): BLOCKINFO
(1,1,-1): BLOCKINFO
(1,-1,-1): BLOCKINFO
etc
(1,-1,-1): BLOCKINFO
(-1,-1,-1): BLOCKINFO
(-1,-1,1): {Depth: 0
Nodes: etc
etc
(1,1,-1): BLOCKINFO
etc
}
Utilisez une classe ou d'un [ 'namedtuple'] (https://docs.python.org/2/library/collections.html#collections .namedtuple). –
_ "mais il semble également que cela ralentisse le code et utilise plus de mémoire car il stocke des clés de texte pour des milliers de dictionnaires." _ Ne vous inquiétez pas jusqu'à ce que vous l'implémentiez réellement et observez un problème de performances. Tout est plus tôt une optimisation prématurée. Quoi qu'il en soit, des milliers de clés sont comme dix kilo-octets, ce qui ne vaut pas la peine d'être compliqué. – Kevin
avec dictionnaire vous avez plus de contrôle à vos données. –