3

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

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”循环

对以这种方式填充字典的优雅/有效方式有什么建议吗?

4

1 回答 1

4

您可以将 a 的结果提供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
于 2013-03-01T11:57:12.137 回答