Si j’ai un dictionnaire comme :
Comment puis-je convertir à cela ?
Et comment puis-je convertir à cela ?
Si j’ai un dictionnaire comme :
Comment puis-je convertir à cela ?
Et comment puis-je convertir à cela ?
>>> d = { 'a': 1, 'b': 2, 'c': 3 }
>>> d.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v, k) for k, v in d.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]
Il n'est pas dans l'ordre que vous voulez, mais dicts ne disposent pas d'un ordre de toute façon. De les trier ou de les organiser en tant que de besoin.
Voir: articles(), iteritems()
En Python 3.x, vous ne devez pas utiliser iteritems
(qui n'existe plus), mais au lieu d'utiliser items
, ce qui renvoie maintenant une "vue" dans le dictionnaire d'objets. Voir Ce qui est Nouveau document pour Python 3.0, et la nouvelle de la documentation sur les points de vue.
Vous pouvez utiliser des compréhensions de liste.
vous obtiendrez [(« a », 1), (« b », 2), (« c », 3)] et
l’autre exemple.
En savoir plus sur les compréhensions de liste si vous le souhaitez, il est très intéressant ce que vous pouvez faire avec eux.
Note: 2 ans de retard, donc s'il vous plaît voter moi si vous aimez cette suggestion :) ...
Créer une liste de namedtuples
Il peut souvent être très pratique à utiliser namedtuple. Par exemple, vous avez un dictionnaire de 'nom' que les clés et le "score" que des valeurs telles que:
d = {'John':5, 'Alex':10, 'Richard': 7}
Vous pouvez lister les éléments de n-uplets, triés si vous le souhaitez, et d'obtenir le nom et le score de, disons que le joueur avec le score le plus élevé (indice=0) très Pythonically comme ceci:
>>> player = best[0]
>>> player.name
'Alex'
>>> player.score
10
Comment faire:
liste dans un ordre aléatoire ou de maintien de l'ordre de collections.OrderedDict:
import collections
Player = collections.namedtuple('Player', 'name score')
players = list(Player(*item) for item in d.items())
dans l'ordre, triés par valeur ("score"):
import collections
Player = collections.namedtuple('Player', 'score name')
triés avec le score le plus bas en premier:
worst = sorted(Player(v,k) for (k,v) in d.items())
triés avec le score le plus élevé en premier:
best = sorted([Player(v,k) for (k,v) in d.items()], reverse=True)
Ce que vous voulez est - dict
s' items()
et iteritems()
méthodes. items
renvoie une liste de (clé,valeur) des n-uplets. Depuis les tuples sont immuables, ils ne peuvent pas être inversés. Ainsi, vous devez parcourir les éléments et de créer de nouveaux tuples pour obtenir l'inversion de l' (valeur,clé) de n-uplets. Pour l'itération, iteritems
est préférable, car il utilise un générateur pour produire de l' (clé,valeur) des n-uplets plutôt que d'avoir à garder l'ensemble de la liste en mémoire.
Python 2.5.1 (r251:54863, Jan 13 2009, 10:26:13)
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = { 'a': 1, 'b': 2, 'c': 3 }
>>> a.items()
[('a', 1), ('c', 3), ('b', 2)]
>>> [(v,k) for (k,v) in a.iteritems()]
[(1, 'a'), (3, 'c'), (2, 'b')]
>>>
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.