Prenons l'exemple ci-dessous:
m = [{'a': 1}, {'b': 2}]
Je voulais trouver un moyen court de former une liste des clés dans m
, tout comme ['a', 'b']
. Quel serait le moyen le plus court ou le plus simple plutôt que d'utiliser des boucles for traditionnelles? Peut-être un sucre syntaxique?
4 Réponses :
Vous pouvez utiliser la compréhension de liste, un sucre sintactique des boucles for:
keys_list = list(set(x for d in m for x in d.keys()))
Notez que si vos dictionnaires ont des clés en commun, elles apparaîtront plusieurs fois dans le résultat. >
Si vous ne voulez que des clés uniques, vous pouvez le faire:
keys_list = [x for d in m for x in d.keys()]
Mais cela ne donne pas une chaîne non? Cela donne quelque chose comme [dict_keys (['a']), dict_keys (['b'])]
, au lieu de ['a', 'b']
Ouais, maintenant je change la réponse, désolé.
Vous pouvez même l'écrire plus simplement: [x pour x en d pour d en m]
car l'itération sur un dictionnaire renvoie les clés.
Merci, je ne savais pas. Si cela ne vous dérange pas, je modifie le message avec votre suggestion.
J'ai déjà cette approche dans ma réponse @dome Je pense que vous voudrez peut-être éviter la duplication?
Désolé, je n'ai pas vu.
avez-vous testé ce code? @dôme
Juste corrigé l'erreur.
Je ne sais pas comment la dernière approche donne des clés uniques, essayez-la simplement avec m = [{'a': 1, 'b': 2}, {'a': 3, 'b': 4}] code>
Vous avez raison, corrigé.
Cool, +1 pour la correction. Pourriez-vous également voter pour ma réponse :)
Oui bien sûr.
Une simple double boucle for avec compréhension de liste devrait faire l'affaire. Parcourez la liste, et pour chaque élément de la liste, parcourez les clés
In [19]: m = [{'a':1, 'b':2},{'a':3,'b':4}] In [20]: r = [k for item in m for k in item] In [21]: r Out[21]: ['a', 'b', 'a', 'b'] In [22]: r = list(set(r)) In [23]: r Out[23]: ['b', 'a']
Si la liste contient des clés en double, convertissez simplement la sortie finale en un ensemble puis en une liste pour obtenir clés uniques
In [5]: m = [{'a':1},{'b':2}] In [6]: [k for item in m for k in item] Out[6]: ['a', 'b']
from itertools import chain a = [{'a': 1, 'c': 2}, {'b': 2}] b = [d.keys() for d in a] list(chain(*b))
renverra:
['c', 'a', 'b']
Si vous ne voulez que des clés uniques, procédez comme suit:
print([x for d in m for x in d])
et celle-ci contient des doublons:
m = [{'a':1},{'b':2},{'b':3}] print({x for d in m for x in d})
avez-vous testé votre code? @alireza yazdandoost
@ncica j'ai édité ça :) maintenant c'est ok