Cómo analizar e imprimir un árbol en Python -- python campo con python-3.x campo con tree campo con binary-tree campo con pretty-print camp Relacionados El problema

How to parse and print a tree in python


1
vote

problema

Español

Actualmente tengo datos en el siguiente formato

  A A -> B -> C -> D -> Z A -> B -> O A -> X   

Esto se almacena en una lista [line1, line2, etc.)

Ahora quiero imprimir esto de la siguiente manera

   A  |- X  |- B     |- O     |- C        |- D           |- Z   

Soy nuevo en Python, así que. Estaba pensando en encontrar '- & gt;' en cada elemento en matriz y reemplazo con el espacio. No sé seguir adelante.

Original en ingles

Currently I have data in the following format

A A -> B -> C -> D -> Z A -> B -> O A -> X 

This is stored in a list [line1,line2, and so forth]

Now I want to print this in the following manner

 A  |- X  |- B     |- O     |- C        |- D           |- Z 

I'm new to python so. I was thinking of finding '->' in each element in array and replacing with space. I don't know to go forward.

              
       
       

Lista de respuestas

1
 
vote
vote
La mejor respuesta
 

Aquí hay un pequeño código para comenzar (agregue sus propias bellezas según sea necesario):

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 0  
 

Here is a little code to get you started (add your own beautifications as needed):

>>> def make_links(data):         'Create a dictionary mapping nodes to a set of their successors'         links = {}         for row in data:             nodes = row.replace(' ', '').split('->')             for a, b in zip(nodes[:-1], nodes[1:]):                 links.setdefault(a, set()).add(b)         return links  >>> def draw_tree(links, start, depth=0):         'Recursively print a tree from a given starting point and given depth'         print('   ' * depth + start)         for node in sorted(links.get(start, [])):             draw_tree(links, node, depth+1)  >>> data = ['A', 'A -> B -> C -> D -> Z', 'A -> B -> O', 'A -> X']  >>> links = make_links(data) >>> links {'A': {'X', 'B'}, 'C': {'D'}, 'B': {'C', 'O'}, 'D': {'Z'}}  >>> draw_tree(links, start='A') A    B       C          D             Z       O    X 
 
 
1
 
vote

Primero analizamos la cadena:

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 111  

Esto volverá

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 2  

Luego lo construimos:

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 3  

Ahora la raíz será:

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 4  

Finalmente lo mostramos:

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 5  

saldrá en mi lugar como este:

              return Fluently.Configure()             .Database(DatabaseConfig)             .Mappings(m => m.AutoMappings.Add(AutoMap.Assembly(typeof(IDependency).Assembly)             .OverrideAll(p => {                 p.SkipProperty(typeof(NoEntity));              }).Where(IsEntity)))             .ExposeConfiguration(ValidateSchema)             .ExposeConfiguration(BuildSchema)             .BuildConfiguration(); 6  

O y C tiene un orden diferente, porque Python DICT no recuerda el orden, lo que es fácil de cambiar por ordenar o usar colecciones.ordereddict

 

First we parse the string:

data = """A     A -> B -> C -> D -> Z     A -> B -> O     A -> X     """  lines = [x.split(' -> ') for x in data.split('\n') if x] 

This will return

[['A'], ['A', 'B', 'C', 'D', 'Z'], ['A', 'B', 'O'], ['A', 'X']] 

Then we build it:

def addone(owner, data):     o = owner.setdefault(data.pop(0), {})     if data:         addone(o, data)  root = {} for line in lines:     addone(root, line) 

Now the root will be:

{'A': {'X': {}, 'B': {'C': {'D': {'Z': {}}}, 'O': {}}}} 

Finally we display it:

def show(base, data):     while data:         k, v = data.pop(0)         print '%s|-%s' % (base, k)         if v:             if data:                 show(base + '| ', v.items())             else:                 show(base + '  ', v.items())  show("", root.items()) 

It will output on my place like this:

|-A   |-X   |-B     |-C     | |-D     |   |-Z     |-O 

O and C has different order, because python dict not remember order, which is easy to change by sort or use collections.OrderedDict

 
 

Relacionados problema

-3  Pretiéndome imprimiendo un árbol binario - conversión de C ++ a Java  ( Pretty printing a binary tree converting from c to java ) 
¿Puede alguien ayudar a implementar el código en > Este sitio web en Java se basa en la siguiente clase como la clase de nodo: map0 El código es para l...

118  Bonito impresión de datos JSON a un archivo con Python  ( Pretty print json data to a file using python ) 
Un proyecto para la clase implica analizar los datos de Twitter JSON. Estoy recibiendo los datos y lo estoy poniendo en el archivo sin muchos problemas, pero ...

2  Use Emacs a Bonito impresión de ActionScript 3.0  ( Use emacs to pretty print actionscript 3 0 ) 
He estado tratando de usar Emacs en modo por lotes para practicar un archivo ActionScript, pero no hace todo lo que esperaría. Descargué ActionScript-mode.el ...

112  Una línea de comandos HTML Pretty-Impresora: Haciendo un lector de html desordenado [cerrado]  ( A command line html pretty printer making messy html readable ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

43  ¿Hay un formato de código de PowerShell / bonita impresora? [cerrado]  ( Is there a powershell code formatter pretty printer ) 
cerrado. Esta pregunta no cumple con pautas de desbordamiento de pila . Actualmente no está aceptando respuestas. ...

27  Java: escribiendo un DOM a un archivo XML (problemas de formato)  ( Java writing a dom to an xml file formatting issues ) 
Estoy usando org.w3c XML API Para abrir un archivo man 2 truncate3 existente. Estoy eliminando algunos nodos, y estoy agregando otros en su lugar. El ...

235  JSON bonito de impresión en Java  ( Pretty print json in java ) 
Estoy usando JSON-SIMPLE < / a> y necesito para practicar los datos JSON (hacerlo más legible humano). No he podido encontrar esta funcionalidad dentro de ...

10  Convertir los archivos ASCII de la fuente a JPEGS  ( Converting source ascii files to jpegs ) 
Publico libros técnicos, impreso, PDF y Kindle / Mobi, con Epub en el camino. El Kindle no admite las fuentes MONOSPACE, que son un poco útiles para los lis...

17  Bonita impresión XML con la biblioteca de Jackson  ( Pretty printing xml with jackson library ) 
Estoy tratando de usar la biblioteca de Jackson para serializar objetos Java en XML utilizando las anotaciones de Jaxb. Sin embargo, me enfrento a un problema...

625  Bonito-impresión JSON con PHP  ( Pretty printing json with php ) 
Estoy construyendo un script PHP que alimenta los datos de JSON a otro script. Mi guión crea datos en una gran matriz asociativa, y luego emite los datos usan...




© 2022 respuesta.top Reservados todos los derechos. Centro de preguntas y respuestas reservados todos los derechos