2015-04-07 4 views
-2

Disons que j'ai une liste qui ressemble à ceciComment créer un dictionnaire imbriqué à partir d'une liste de valeurs en python

['foo', 'bar', 'baz'] 

Cette liste contient une liste imbriquée de clés. A partir de cette liste, je voudrais créer une dict comme ceci:

{"foo": {"bar": {"baz": {}}} 

Comment faire?

+0

Voulez-vous obtenir '{" foo ": {" bar ": {" baz ": {}}}'? –

+0

Que voulez-vous dire par =>? – flycee

+0

La récursivité est la réponse. :) – Shashank

Répondre

1

Il est une fonction récursive simple:

def nest(l, d=None): 
    if d is None: d = {} 
    k = l.pop() 
    return l and nest(l, {k: d}) or {k: d} 

Pour appeler la fonction sans effets secondaires à la liste initiale, vous pouvez transmettre une copie superficielle de la tranche:

nest(l[:]) 
+0

Je n'utiliserais pas un objet mutable comme argument par défaut, bien que ... – Ben

+0

@Ben merci d'avoir remarqué Ben, je l'ai corrigé pour utiliser 'None' comme argument par défaut. – Shashank

+0

@Shashank Que fait l'instruction de retour? Je ne sais vraiment pas comment lire ça. Pouvez-vous s'il vous plaît expliquer? –

1

Afin de laisser programme être lisible, je modifie un peu factoriel. Parce qu'apprendre à utiliser Recursion, Factorial et Fibonacci est tellement basique pour débutant.

a = ['foo', 'bar', 'baz'] 

def recursion(arr):  
    if len(arr)==0: 
     return {} 
    else: 
     key = arr.pop() 
     return {key: recursion(arr)} 

print recursion(a)