Tengo lista:

['Location: NY',
 'price: 11103 USD', 
 'Year: 2018', 
 'Model: Golf VII',
'Security',
'Airbag']

¿Cómo lo convierto en diccionario? Estoy usando un tipo de lista diferente al que se describe en el problema aquí. También algunos elementos de la lista están vacíos , necesito omitirlos en el diccionario final.

-3
Harvey 11 oct. 2019 a las 14:48

7 respuestas

La mejor respuesta

Puedes usar hacer una comprensión de dict para esta aplicación,

Mi solución es similar a la de la respuesta de @vahdet, pero esta solución se encargará de múltiples espacios que pueden ocurrir en clave o valor.

l = ['Location: NY',
 'price: 11103 USD', 
 'Year: 2018', 
 'Model: Golf VII']

dict( (x.split(':')[0].strip(),  x.split(':')[1].strip()) for x in l )

Puede utilizar esta misma comprensión de dict para manejar elementos no válidos en la lista comprobando si : existe en la lista o no de esta manera y agregando el valor-clave solo si el elemento es válido,

l = ['Location: NY',
     'price: 11103 USD',
     'Year: 2018',
     'Model: Golf VII',
     'Security',
     'Airbag']

print(dict((x.split(':')[0].strip(), x.split(':')[1].strip()) for x in l if ':' in x))
2
Sreeram TP 11 oct. 2019 a las 13:55

Si tu patrón siempre te gusta, puedes split(': ') tus artículos

my_list = ['Location: NY', 'price: 11103 USD', 'Year: 2018', 'Model: Golf VII']
my_dict = { i.split(': ')[0] : i.split(': ')[1] for i in my_list }

ADICION PARA LOS VALORES VACÍOS:

También puede extraer su lógica en una función y hacer algunos otros controles (recorte, valores nulos, etc.), y aún usar la comprensión del diccionario de la siguiente manera:

def str_to_keyval(inp, separator=':'):
  # to list
  li = inp.split(separator) if (separator in inp) else [inp, '']
  # strip elements
  return [i.strip() for i in li]

my_list = [
  'Location: NY',
  'price: 11103 USD',
  'Year: 2018',
  'Model: Golf VII',
  'Security',
  'Airbag'
]

my_dict = { str_to_keyval(i)[0] : str_to_keyval(i)[1] for i in my_list }

Puede cambiar la presentación de valores nulos (ignorar sus claves o denotar con una cadena vacía, etc.) editando la primera línea de la función str_to_keyval en el ejemplo. Tal como está, da una cadena vacía como valores faltantes.

3
vahdet 11 oct. 2019 a las 13:22

Puede usar la función split para obtener las partes de cada cadena para crear su referencia de diccionario:

arr = ['Location: NY', 'price: 11103 USD', 'Year: 2018', 'Model: Golf VII']
dict = {}

for i in range(0, len(arr)):
    key, value = arr[i].split(": ")
    dict[key] = value

print(dict)
1
Omari Celestine 11 oct. 2019 a las 12:01

Puede usar una comprensión simple con dict:

my_list = ['Location: NY', 'price: 11103 USD', 'Year: 2018', 'Model: Golf VII']
result = dict(i.split(': ') for i in my_list)

Salida:

{'Location': 'NY', 'price': '11103 USD', 'Year': '2018', 'Model': 'Golf VII'}
1
Ajax1234 11 oct. 2019 a las 15:00

Ok, lo primero que tendrás que hacer es recorrer cada elemento de la lista. Esto es bastante fácil usando un bucle for

for item in lst:
    # do stuff with the item

Después de eso, deberá separar el elemento en una clave y un valor. Las claves y los valores ya están separados por dos puntos y un espacio, por lo que simplemente dividiría la cadena con eso.

for item in lst:
    split_item = item.split(": ")
    key = split_item[0]
    value = split_item[1]
    # then you need to add the key and item to the dictionary

Agregar el valor es bastante simple. Simplemente defina el nuevo valor:

dictionary = {} # just to initialize the dictionary, if you already initialized it, don't do this
for item in lst:
    split_item = item.split(": ")
    key = split_item[0]
    value = split_item[1]
    dictionary[key] = value

Eso es

1
Botahamec 11 oct. 2019 a las 11:58

Con esta lista:

mylist = ['Location: NY',
 'price: 11103 USD', 
 'Year: 2018', 
 'Model: Golf VII']

Prueba el siguiente código:

mydict = {}
for l in mylist: 
    a,b = l.split(': ')
    mydict[a] = b
print(mydict)

Salida:

{'Year': '2018', 'Model': 'Golf VII', 'price': '11103 USD', 'Location': 'NY'}
1
rnso 11 oct. 2019 a las 13:28
a=['Location: NY',
 'price: 11103 USD',
 'Year: 2018',
 'Model: Golf VII']

   b=[]

   x={}

   for i in range(len(a)):

       b.append(a[i].split(':'))


   for i in range(len(b)):

       for j in range(len(b[i])):

          x[b[i][0]]=b[i][1]

   print(x)
-3
Joe 11 oct. 2019 a las 12:58
58340665