2017-08-14 20 views
-1

以下はサンプルのリストデータです。私はそれを動的辞書に変換したいと思います。Python - 辞書のリストからダイナミックネストされた辞書を作成する

result = [ 
    { 
     "standard": "119", 
     "score": "0", 
     "type": "assignment", 
     "student": "4" 
    }, 
    { 
     "standard": "119", 
     "score": "0", 
     "type": "assignment", 
     "student": "5" 
    }, 
    { 
     "standard": "118", 
     "score": "0", 
     "type": "assessment", 
     "student": "4" 
    } 
] 

私は動的にdictonaryするキーのすべてのリストをconvertes一つの機能conv_to_nested_dict(* argsを、データ)を、作成したいです。例えば

:conv_to_nested_dict([、 '標準' '学生']、その結果)OPを与えるべきである:

{ 
    "118": { 
     "4": [{ 
      "score": "0", 
      "type": "assessment" 
     }] 
    }, 
    "119": { 
     "4": [{ 
      "score": "0", 
      "type": "assignment" 
     }], 
     "5": [{ 
      "score": "0", 
      "type": "assignment" 
     }] 
    } 

} 

conv_to_nested_dict([ '標準'、 'タイプ']、結果)

{ 
    "118": { 
     "assessment": [{ 
      "score": 0, 
      "student": "4" 
     }] 
    }, 
    "119": { 
     "assignment": [{ 
      "score": 0, 
      "student": "4" 
     },{ 
      "score": 0, 
      "student": "5" 
     }] 
    } 

} 
+0

これはあなたの宿題ですか? – wroniasty

+0

@ wroniasty私は論理を考えながら立ち往生しています。私は、Pythonでグループ化し、フィルタを使うようなアプローチを試しました。私はジェネリックでダイナミックなので、助けを求めています。私が直面している主な問題は、キーが出力辞書で動的であることです。 – Akash

+0

希望の出力構造にエラーがあるようです。閉じていないリストがあります。それをきれいにして質問を明確にしてください –

答えて

1

これは一般的な考えです。

def conf_to_nested_dict(keys, result): 
    R = {} 
    for record in result: 
     node = R 
     for key in keys[:-1]: 
      kv = record[key] 
      next_node = node.get(kv, {}) 
      node[kv] = next_node 
      node = next_node 
     last_node = node.get(record[keys[-1]], []) 
     last_node.append(record) 
     node[record[keys[-1]]] = last_node 


    return R 

#R is your structure 

resultソース配列である、keysは、グループ結果にたいしてキーです。各レコードの結果を繰り返し処理する - キー値(record [key])に基づいてツリー構造を作成する。最後のキー - リストを作成し、そのレコードをレコードに追加します。

+0

ありがとう、これは完璧にうまくいった。あなたは私の日を救った、ありがとう。 :) – Akash

関連する問題