J'aime la syntaxe de compréhension de la liste Python.
Peut-il également être utilisé pour créer des dictionnaires? Par exemple, en itérant sur des paires de clés et de valeurs:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
J'aime la syntaxe de compréhension de la liste Python.
Peut-il également être utilisé pour créer des dictionnaires? Par exemple, en itérant sur des paires de clés et de valeurs:
mydict = {(k,v) for (k,v) in blah blah blah} # doesn't work
collections.Counter
est un type de dict spécialisé pour compter les choses: utiliser un dictionnaire pour compter les éléments d'une listeRéponses:
À partir de Python 2.7 et 3, vous devez simplement utiliser la syntaxe de compréhension de dict :
Dans Python 2.6 et versions antérieures, la fonction
dict
intégrée peut recevoir un itérable de paires clé / valeur, vous pouvez donc lui transmettre une compréhension de liste ou une expression de générateur. Par exemple:Cependant, si vous avez déjà des clés et / ou des valeurs itérables, vous n'avez pas du tout besoin d'utiliser une compréhension - c'est plus simple, appelez
dict
directement le intégré:la source
Dans Python 3 et Python 2.7+, les compréhensions de dictionnaire ressemblent à ce qui suit:
Pour Python 2.6 ou version antérieure, voir la réponse de fortran .
la source
En fait, vous n'avez même pas besoin d'itérer sur l'itérable s'il comprend déjà une sorte de mappage, le constructeur de dict le fait gracieusement pour vous:
la source
En Python 2.7, cela se passe comme:
Fermez-les !
la source
Vous recherchez l'expression «compréhension du dict» - c'est en fait:
En supposant que
blah blah blah
c'est un itérable de deux tuples - vous êtes si proche. Créons des "blahs" comme ça:Syntaxe de compréhension des dictés:
Maintenant, la syntaxe est ici la partie de mappage. Ce qui en fait une
dict
compréhension au lieu d'uneset
compréhension (ce qui est approximatif de votre pseudo-code), c'est le deux-points,:
comme ci-dessous:Et nous voyons que cela a fonctionné, et devrait conserver l'ordre d'insertion à partir de Python 3.7:
En Python 2 et jusqu'à 3.6, l'ordre n'était pas garanti:
Ajout d'un filtre:
Toutes les compréhensions comportent un composant de mappage et un composant de filtrage que vous pouvez fournir avec des expressions arbitraires.
Vous pouvez donc ajouter une partie filtre à la fin:
Ici, nous testons simplement si le dernier caractère est divisible par 2 pour filtrer les données avant de mapper les clés et les valeurs.
la source
Version Python <2.7 (RIP, 3 juillet 2010 - 31 décembre 2019) , procédez comme suit:
Version Python> = 2.7, procédez comme suit:
la source
Pour ajouter à la réponse de @ fortran, si vous souhaitez parcourir une liste de clés
key_list
ainsi qu'une liste de valeursvalue_list
:ou
la source
Voici un autre exemple de création de dictionnaire utilisant la compréhension de dict:
Ce que je suis sur le point de faire ici, c'est de créer un dictionnaire alphabétique où chaque paire; est la lettre anglaise et sa position correspondante dans l'alphabet anglais
Notez l'utilisation d'énumérer ici pour obtenir une liste des alphabets et leurs index dans la liste et permuter les alphabets et les index pour générer la paire de valeurs clés pour le dictionnaire
J'espère que cela vous donne une bonne idée de la composition du dictionnaire et vous encourage à l'utiliser plus souvent pour rendre votre code compact
la source
d = {k: v+1 for v, k in enumerate(string.ascii_lowercase)}
Essaye ça,
Supposons que nous ayons deux listes de pays et de capitaux
Créez ensuite un dictionnaire à partir des deux listes:
La sortie est comme ça,
la source
Python prend en charge les compréhensions dict, qui vous permettent d'exprimer la création de dictionnaires lors de l'exécution en utilisant une syntaxe concise similaire.
Une compréhension de dictionnaire prend la forme {clé: valeur pour (clé, valeur) en itérable}. Cette syntaxe a été introduite dans Python 3 et rétroportée jusqu'à Python 2.7, vous devriez donc pouvoir l'utiliser quelle que soit la version de Python que vous avez installée.
Un exemple canonique prend deux listes et crée un dictionnaire où l'élément à chaque position dans la première liste devient une clé et l'élément à la position correspondante dans la deuxième liste devient la valeur.
La fonction zip utilisée dans cette compréhension renvoie un itérateur de tuples, où chaque élément du tuple est pris à la même position dans chacun des itérables d'entrée. Dans l'exemple ci-dessus, l'itérateur retourné contient les tuples («a», 1), («b», 2), etc.
Production:
{'i': 512, 'e': 64, 'o': 2744, 'h': 343, 'l': 1331, 's': 5832, 'b': 1, 'w': 10648, ' c ': 8,' x ': 12167,' y ': 13824,' t ': 6859,' p ': 3375,' d ': 27,' j ': 729,' a ': 0,' z ' : 15625, «f»: 125, «q»: 4096, «u»: 8000, «n»: 2197, «m»: 1728, «r»: 4913, «k»: 1000, «g»: 216 , 'v': 9261}
la source
Ce code créera un dictionnaire en utilisant la compréhension de liste pour plusieurs listes avec des valeurs différentes qui peuvent être utilisées pour
pd.DataFrame()
enumerate
passeran
àvals
pour correspondre à chacunkey
avec sa listela source
Juste pour jeter un autre exemple. Imaginez que vous ayez la liste suivante:
et vous voulez le transformer en dict où la clé est l'index et la valeur est l'élément dans la liste. Vous pouvez le faire avec la ligne de code suivante:
la source
Vous pouvez créer un nouveau dict pour chaque paire et le fusionner avec le dict précédent:
De toute évidence, cette approche nécessite
reduce
defunctools
.la source