J'essaie d'obtenir une liste de toutes les clés dans une liste de dictionnaires afin de remplir l'argument fieldnames pour csv.DictWriter.Extraire toutes les clés d'une liste de dictionnaires
précédemment, j'avais quelque chose comme ceci:
[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5},
{"name": "Pam", "age": 7}
]
et j'utilisais fieldnames = list[0].keys()
de prendre le premier dictionnaire dans la liste et en extraire les clés.
Maintenant, j'ai quelque chose comme ceci où l'un des dictionnaires a plus de paires clé-valeur que les autres (pourrait être l'un des résultats). Les nouvelles clés sont ajoutées dynamiquement en fonction des informations provenant d'une API, de sorte qu'elles peuvent apparaître ou non dans chaque dictionnaire et je ne sais pas à l'avance le nombre de nouvelles clés.
[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5, "height":4},
{"name": "Pam", "age": 7}
]
Je ne peux pas utiliser fieldnames = list[1].keys()
car il est pas nécessairement le deuxième élément qui aura des clés supplémentaires.
Une solution simple serait de trouver le dictionnaire le plus grand nombre de clés et de l'utiliser pour les noms des champs, mais cela ne fonctionnera pas si vous avez un exemple comme celui-ci:
[
{"name": "Tom", "age": 10},
{"name": "Mark", "age": 5, "height":4},
{"name": "Pam", "age": 7, "weight":90}
]
où les deux deuxième et troisième dictionnaire ont 3 clés, mais le résultat final devrait vraiment être la liste ["name", "age", "height", "weight"]
+1 compréhensible et élégante –
J'ai essayé comme '= fieldnames set() union (d.keys() pour d en allresults)' mais a obtenu un "TypeError: type unchashable: 'list'" – orh
Fonctionne très bien maintenant, merci – orh