Acortar la comprensión del dict con la operación repetida -- python campo con python-3.x campo con iterator camp codereview Relacionados El problema

Shorten dict comprehension with repeated operation


6
vote

problema

Español
  dc = {line.split('=')[0]: line.split('=')[1] for line in txt}   

a continuación evita la duplicación, pero es aún más larga:

  dc = {k: v for line in txt for k, v in       zip(*map(lambda x: [x], line.split('=')))}   

¿De qué manera mejor? Justo sin ninguna importancia.


Contexto: with open('config.txt', 'r') as f: txt = f.read().split(' ')

  a=1 bc=sea   
  >>> {'a': '1', 'bc': 'sea'}  # desired output; values should be string   
Original en ingles
dc = {line.split('=')[0]: line.split('=')[1] for line in txt} 

Below avoids duplication but is even longer:

dc = {k: v for line in txt for k, v in       zip(*map(lambda x: [x], line.split('=')))} 

Any better way? Just without any imports.


Context: with open('config.txt', 'r') as f: txt = f.read().split('\n')

a=1 bc=sea 
>>> {'a': '1', 'bc': 'sea'}  # desired output; values should be string 
        
 
 

Lista de respuestas

7
 
vote
vote
La mejor respuesta
 
  dc = dict(line.split('=') for line in txt)   
 
dc = dict(line.split('=') for line in txt) 
 
 
 
 
3
 
vote

Este es uno de los tipos de problemas que el operador de la mora := puede manejar:

  dc = {(s := line.split('='))[0]: s[1] for line in txt}   

Por supuesto, en este caso hay una solución mucho más limpia.

 

This is one of the types of problems that the walrus operator := can handle:

dc = {(s := line.split('='))[0]: s[1] for line in txt} 

Of course, in this case there's a much cleaner solution.

 
 
3
 
vote
  {k: v for line in txt for k, v in [line.split('=')]}   

Advantage Over superb rain 's La respuesta es la capacidad de modificar k y 99887766555443310 si es necesario. Memoria ligera y amplificador; Ventaja de la velocidad al evitar la asignación a través de un generador (Crédito @ GZ0):

  $builder->setType('text')         ->build();  // tag: input, type: text $builder->setType('password')         ->build(); // tag: input, type: password $builder->reset(); // reset everything to defaults $builder->setTag('textarea') // tag: textarea: type: text         ->build(); 1  
 
{k: v for line in txt for k, v in [line.split('=')]} 

Advantage over superb rain's answer is ability to modify k and v if needed. Slight memory & speed advantage by avoiding allocation via a generator (credit @GZ0):

{k: v for k, v in (line.split('=') for line in txt)} 
 
 
         
         

Relacionados problema

4  Clase de lista similar a LPP  ( Lisp like list class ) 
Entonces, aquí está mi código: .png1 Me preocupa un poco de que no tenga una clase separada para pares simples (por ejemplo: listas no terminadas correc...

1  Iterador de secuencia numérico bidireccional (punto flotante)  ( Bidirectional numeric floating point sequence iterator ) 
Quería un iterador limpio que siempre me dará una secuencia limpia de step Números espaciados. Esto es lo que acompañé, pero soy un poco escéptico que cubrí...

15  CircularListcursor: un cursor circular eficiente en cualquier lista  ( Circularlistcursor an efficient circular cursor on any list ) 
He decidido crear mi propio CircularListCursor , porque quería una abstracción y un 9988777655544338 no podría dar lo suficiente en mi opinión. También est...

45  Simple ejemplo de un iterador y un iterador en Java  ( Simple example of an iterable and an iterator in java ) 
Fue un TA por un curso de programación Java de primer año este año. Como ejemplo muy simple de Iterables / Iteradores, escribí el siguiente código para los es...

3  C ++ 11 Quicksort cualquier contenedor  ( C11 quicksort any container ) 
Como dice el título, Simple Quicksort para ayudarme a acostumbrarme a las plantillas e iteradoras de C ++. La principal preocupación es si hay una mejor maner...

4  Paginado IEnumerable <T> secuencia  ( Paginate ienumerablet sequence ) 
Usé lo siguiente para dividir la secuencia en lotes: source .Select((item, index) => new {Item = item, Index = index}) .ToLookup(x => x.Index / bat...

2  Foreach Polymorphic STL sin pasar el tipo de contenedor  ( Polymorphic stl foreach without passing the container type ) 
Estaba tratando de averiguar cómo hacer una macro forete para hacer una macro para los contenedores de STL y me fui con este método que usa plantillas para re...

4  Usando un iEnumerator sin un bucle de foreach para simular una máquina de estado  ( Using an ienumerator without a foreach loop in order to simulate a state machine ) 
Estoy trabajando con un objeto que necesita para ejecutar un método 99887766655544338 . A veces, el ExecuteEffect() solo debe ejecutarse una vez, mientras ...

7  Aplicar acción arbitraria durante la función de generador recursivo  ( Apply arbitrary action during recursive generator function ) 
Tengo esta función de generador recursivo. Traerá un objeto en busca de "hojas", cualquier tecla que no apunte a sub-objetos. Luego aplica una de las dos ac...

7  Transformando el iterador  ( Transforming iterator ) 
La pregunta es el seguimiento de iterador de preprocesamiento . Especificación: Dado Functor functor (que es Callable3 ) y Iterator iterator4 (que ...




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