从数据库查询填充嵌套字典

时间:2013-03-01 11:25:07

标签: python dictionary

我的数据库中的数据看起来像这样(简化)

colA, colB, colC
'a',   1,   'abc'
'a',   2,   'def'
'b',   1,   'ghi'
'b',   2,   'jkl'

我的目标是从该表构建一个嵌套字典,如下所示:

dict = {a: {1: 'abc'}, {2: 'def'},
        b: {1: 'ghi'}, {2: 'jkl'}}

在我的实际情况中,我有更多的嵌套级别。 作为数据库查询,我想我可以逐行执行'for'循环

是否建议以这种方式优雅/高效地填充字典?

1 个答案:

答案 0 :(得分:3)

您可以将cursor.fetchall()的结果提供给此功能。它处理任意数量的列> = 2。

def nest(rows):
    root = {}
    for row in rows:
        d = root
        for item in row[:-2]:
            d = d.setdefault(item, {})
        d[row[-2]] = row[-1]
    return root

创建任意深度嵌套字典的另一种方法是:

import collections

def nesteddict():
    return collections.defaultdict(nesteddict)

nd = nesteddict()
for a, b, c in rows:
    nd[a][b] = c