我的数据库中的数据看起来像这样(简化)
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'循环
是否建议以这种方式优雅/高效地填充字典?
答案 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