【发布时间】:2010-08-06 19:43:52
【问题描述】:
我正在创建一个动态保存汽车信息的数据结构。字典看起来像这样:
cars = {'toyota': {'prius': {'transmission':'automatic', 'mpg':30, 'misc':[]}}}
最外层字典包含汽车品牌(丰田、宝马等),第二个字典包含模型(普锐斯、m5 等),内层字典包含汽车的详细信息。这是保存这些信息的最佳方式吗?
我正在构建数据结构并访问它。我真的想不出另一种方法来做到这一点,但代码看起来有点乱,有一堆:
cars['toyota'].setdefault('prius', {}).setdefault('misc', []).append('hello')
【问题讨论】:
-
我同意它看起来有点乱,但我只是写了一个算法,涉及递归的字典元组和列表
({'dir': ({'dir': ({}, ['file', 'file']), 'dir': ({}, ['file'])}, ['file', 'file', 'file'])}, ['file', 'file']) -
@Carson - 这是一个令人讨厌的结构......有什么理由不对其进行重构?
-
@Wayne 我本可以使用类而不是元组,但我希望将目录与文件分开,并且我选择了元组而不是实例化一大堆对象。而且其实算法还不错,不像结构那么复杂
-
@Carson,从技术上讲,创建元组是实例化一堆对象——它们只是一种非常特殊的对象类型。至于分离,只有一些“dir”对象和一些“file”对象(当然,为了避免冲突/阴影而重命名)可能会产生与您的复杂数据结构相同的效果,但具有更多的可读性。不确定创建大量自定义对象与元组/字典的速度,但我猜它几乎相同。
-
@Wayne 没错——无论如何,我选择了这种编码来适应我的算法。数据结构是动态生成的,而算法不是。在任何情况下,我发现很容易对目录进行排序,递归到它们中,并且在完成处理给定目录的第一个元组元素后,对第二个元组元素进行排序和迭代。这种结构也类似于输出的结构,所以它让一切都很好地流动。
标签: python dictionary