Estoy tratando de obtener una lista de todas las claves en una lista de diccionarios para completar el argumento de nombres de campo para csv.DictWriter.Extraer todas las claves de una lista de diccionarios
anteriormente, tenía algo como esto:
[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5},
{"name": "Pam", "age": 7}
]
y yo estaba usando fieldnames = list[0].keys()
a tomar el primer diccionario en la lista y extraer sus llaves.
Ahora tengo algo así como que uno de los diccionarios tiene más pares clave: valor que los demás (podría ser cualquiera de los resultados). Las nuevas claves se agregan dinámicamente en función de la información que proviene de una API, por lo que pueden aparecer o no en cada diccionario y no sé con anticipación cuántas claves nuevas habrá.
[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5, "height":4},
{"name": "Pam", "age": 7}
]
No puedo sólo tiene que utilizar fieldnames = list[1].keys()
ya que no es necesariamente el segundo elemento que va a tener copias de las llaves.
Una solución sencilla sería encontrar el diccionario con el mayor número de teclas y utilizarla para los nombres de campo, pero eso no va a funcionar si usted tiene un ejemplo como este:
[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5, "height":4},
{"name": "Pam", "age": 7, "weight":90}
]
donde tanto el diccionario segunda y tercera tienen 3 llaves, pero el resultado final debería ser la lista ["name", "age", "height", "weight"]
+1 comprensible y elegante –
Probé esto como 'nombres de campo = set() Unión (d.keys() para d en allresults)' pero consiguieron una "TypeError: tipo insabrable: 'list'" – orh
Funciona muy bien ahora, gracias – orh