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」ループを1行ずつ実行できると思います

この方法で辞書を作成するためのエレガントで効率的な方法への提案はありますか?

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 に答える