3
votes

Créer des dictionnaires de manière récursive à partir de caractères de chaîne

Je travaille sur un algorithme de compression pour une structure de données spécifique et une partie de celui-ci nécessite de transformer une chaîne en dictionnaire comme suit:

    "abc" => {'a':{'b':{'c':{}}}

qui est un groupe de dictionnaires imbriqués basé sur le lettres du mot.

Comment puis-je faire cela de manière récursive en python?


4 commentaires

Vous voulez probablement dire {'a': {'b': {'c': {}}} ? {a: {b: {c: {}}} déclenchera NameError


Merci d'avoir signalé l'erreur, je l'ai corrigée.


Vous avez dit «récursif» dans la question - cela signifie-t-il que vous avez besoin de la solution pour utiliser la récursivité?


De préférence, oui.


3 Réponses :


1
votes

C'est une façon:

s = 'abc'
d = {}
current = d
for c in s:
    current = current.setdefault(c, {})
print(d)
# {'a': {'b': {'c': {}}}}


0 commentaires

2
votes

Voici une solution utilisant réduire :

{'a': {'b': {'c': {}}}}

Sortie

from functools import reduce

seq = 'abc'
result = reduce(lambda value, key: { key : value }, reversed(seq), {})

print(result)


0 commentaires

4
votes

Vous pouvez utiliser la récursivité avec le découpage de liste:

{'a': {'b': {'c': {}}}}

Sortie:

def to_dict(d):
  return {} if not d else {d[0]:to_dict(d[1:])}

print(to_dict('abc'))


0 commentaires