我用python开发了一个程序,用扁平的字典组织数据。 随着dict大小的增加,由于密集的键搜索,程序变得更慢。 在我看来,嵌套字典结构似乎是一种“分层”方法,可以加快键的搜索速度。 我错了吗?
是嵌套字典吗?
nested_dict = { 'dictA': {'key_1': 'value_1', 'key_2': 'value_2'},
'dictB': {'key_3': 'value_3', 'key_4': 'value_4', 'key_5': 'value_5'},
...
'dictZ': {'key_m': 'value_m', 'key_n': 'value_n'}}
比扁平化的字典快:
dictionary = {'key_1': 'value_1',
'key_2': 'value_2',
...
'key_n': 'value_n'}
编辑:添加了一些代码示例
下面我通常使用的一段代码。该程序很大,因此没有要评估的特定代码
任务:
dictionary['key_1'] = dictionary2['key_a']
dictionary['key_3'] = dictionary2['key_a']*dictionary['key_4']
有条件的声明:
if( (0 == dictionary['key_1']) and
(dictionary2['key_b'] >= dictionary['key_3']) ):
答案 0 :(得分:2)
在我看来,嵌套字典结构是一个 “分层”方法可以加快密钥的搜索。我是吗 错误吗?
是:-)
平面dict空间具有O(1)查找,与大小无关。这就是哈希表作为数据结构如此吸引人的原因。
添加层次结构只会添加额外的哈希步骤和查找步骤。
在某些情况下,容器确实可以通过变小而获得一些缓存局部性的好处,但是在Python中,容器引用的对象分散在整个内存中,因此紧凑性无济于事。
此外,Python是一种解释型语言,因此添加额外的查找层还需要进行更多的操作码评估。这将淹没任何紧凑的好处。
答案 1 :(得分:0)
平面词典比嵌套词典更快。为了补充此答案,这是我构建字典的方式。
如果数据的结构方式可以通过组合键(复合键)识别一个值,请使用元组作为字典键。
companies = {}
companies[('Canada', 'ABC')] = 'Association des Bucherons du Canada'
companies[('Usa', 'ABC')] = 'American Broadcasting Company'
companies[('Usa', 'AAPL')] = 'Apple'
>>> companies.keys()
dict_keys([('Canada', 'ABC'), ('Usa', 'ABC'), ('Usa', 'AAPL')])
您的字典将平整而快速。