python, iteración del generador con uno o más elementos
Frecuentes
Visto 3,034 veces
1
Estoy usando pyyaml y estoy cargando un archivo.yml
stream = open("file.yml", "r")
results = yaml.load_all(stream)
resultados ahora contiene un objeto generador.
Entonces, estoy tratando de procesar esto:
for key, value in results:
print(key, "->", value)
si tengo más de un "elemento yaml" en mi archivo.yml, esto funciona bien. ejemplo:
foo: bar
Hola Mundo
pero, si tengo un solo "elemento yaml" en mi archivo.yml, esto no funciona. ejemplo:
foo: bar
el error es: ValueError: need more than 1 value to unpack
estoy usando python 3
¿Como puedo resolver esto? el archivo.yml puede contener 1 o más elementos.
2 Respuestas
2
results
es una lista de diccionarios, por lo que en lugar de iterar sobre eso, desea iterar sobre los diccionarios:
for dictionary in results:
for key, value in dictionary.items():
print(key, "->", value)
Entonces, estaba tratando de asignar la clave a un diccionario y el valor a otro, porque estaba desempaquetando de la lista y no del diccionario. dict.items()
devuelve una lista de tuplas con la clave en la primera posición y el valor en la otra de la tupla.
Respondido el 21 de Septiembre de 13 a las 12:09
1
results = yaml.load_all(stream)
for doc in results:
for k, v in doc.items():
print(k, "->", v)
respondido 26 mar '15, 13:03
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas python loops yaml generator or haz tu propia pregunta.
¿por qué? siempre tengo un diccionario :S - fj123x
@ fj123x Entonces, ¿por qué se generaría ValueError? - terrya
no sé, vea el ejemplo file.yml, siempre pongo key: value data en mi yml, pero cuando el generador solo tiene 1 elemento, el ValueError está aumentando (esto no ocurre cuando tiene más de 1 elemento) - fj123x
@ fj123x Eso no parece correcto. Hacer
print(list(results))
. ¿Qué aparece? - terrya[{'foo': {'bar': 'test', 'hello': 'world'}}] esto es un dict foo: {...} - fj123x