2017-09-05 1 views
0

Je souhaite modifier ce dictionnaireComment changer les éléments du dictionnaire en mots?

d = {"p ": {"e ": {"l ": {"t ": {}}, 
        "t ": {}}, 
      "o ": {"t ": {}}}, 
    "t ": {"i ": {"a ": {}, 
        "m ": {}}, 
      "e ": {"o ": {}}}} 

à la liste des mots [ 'animal', 'peau', 'pot', 'tim', 'tia', 'Teo'] et je ne sais pas comment pour le faire.

+4

Il est très difficile de savoir comment vous obtenez votre liste de sortie des mots du dictionnaire. Pouvez-vous expliquer la logique que vous voulez appliquer? – asongtoruin

+0

par exemple "p" -> "e" -> "l" -> "t" -> {} nous donne "pelt" "p" -> "e" -> "t" -> {} nous donne "animal de compagnie" etc – t387

Répondre

2

Utilisez la récursivité! Aussi les générateurs le rendent agréable.

def paths(tree): 
    if not tree: 
     yield '' 
    for k, subtree in tree.items(): 
     for path in paths(subtree): 
      yield k + path 

print(list(paths(d))) 
+0

Je suis surpris de l'efficacité de ce qui était réellement. essayant toujours d'envelopper mon cerveau autour de comment la récursivité fonctionne :( – Mangohero1

0

Vous pouvez essayer ceci:

import itertools 
final_words = [[[key+i+e+''.join(l[e].keys()) if l[e] else key+i+e for e in l] for i, l in vals.items()] for key, vals in d.items()] 
final_data = list(itertools.chain.from_iterable([list(itertools.chain.from_iterable(i)) for i in final_words])) 
new_final_data = [''.join(i.split()) for i in final_data] 

Sortie:

['pet', 'pelt', 'pot', 'tia', 'tim', 'teo']