Comment puis-je convertir un dictionnaire Python pour une liste de tuples?
Si j'ai un dictionnaire comme:
{ 'a': 1, 'b': 2, 'c': 3 }
Comment puis-je convertir il pour cela?
[ ('a', 1), ('b', 2), ('c', 3) ]
Et comment puis-je convertir il pour cela?
[ (1, 'a'), (2, 'b'), (3, 'c') ]
[tuple(reversed(x)) for x in d.items()]
- Compte tenu de
x
est déjà untuple
dans votre code (c'est la nature deitems
pour produire un objet iterabletuple
s), il serait plus simple, plus rapide de simplement faire de[x[::-1] for x in d.items()]
; l'inversion de la tranche directement constructions de l'inversion de latuple
de la bonne taille, plutôt que d'avoir letuple
constructeur de manière itérative à remplir (avec la surutilisation et le redimensionnement à la fin) untuple
à partir d'unreversed
itérateur. - vous êtes de droite. Je voulais juste être explicite qu'il n'est pas toujours un besoin pour
k, v
modèle dans de tels cas. - Remarque: ajout de
compatibility
tag en raison de py2.x // py3.différences x
InformationsquelleAutor mike | 2009-03-23
Vous devez vous connecter pour publier un commentaire.
Il n'est pas dans l'ordre que vous voulez, mais dicts ne disposent pas d'un ordre de toute façon.1 de les Trier ou de les organiser en tant que de besoin.
Voir: les éléments(), iteritems()
En Python 3.x, vous n'utilisez pas
iteritems
(qui n'existe plus), mais au lieu d'utiliseritems
, qui retourne maintenant une "vue" dans le dictionnaire d'objets. Voir la Ce qui est Nouveau document pour Python 3.0, et la nouvelle la documentation sur les points de vue.1: Insertion-la conservation de l'ordre pour les dicts était ajouté en Python 3.7
car personne d'autre ne l'a fait, je vais ajouter py3k versions:
Vous pouvez utiliser interprétations de la liste.
vous obtiendrez
[ ('a', 1), ('b', 2), ('c', 3) ]
etl'autre exemple.
Lire plus sur les interprétations de la liste si vous voulez, c'est très intéressant ce que vous pouvez faire avec eux.
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 comme:
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:
Comment faire:
liste dans un ordre aléatoire ou de maintien de l'ordre de les collections.OrderedDict:
dans l'ordre, triés par valeur ("score"):
triés avec le score le plus bas en premier:
triés avec le score le plus élevé en premier:
Ce que vous voulez est
dict
'sitems()
etiteritems()
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.et
Par
keys()
etvalues()
méthodes de dictionnaire etzip
.zip
sera de retour une liste de tuples qui agit comme un commandés dictionnaire.Démo:
collections.OrderedDict()
qui fonctionne mieux avec plusieurs versions de Python Requêtes HTTP lib. Même si je n'aime pas lezip
nom de la fonction comme étant un peu vague/surchargé.zip
-ification n'est pas une "profonde" de la coulée, c'est à dire si il sont imbriqués les enfants, elles ne seront pas touchés. Vous pourriez avoir à rouler vos propres récursivité.Pour Python3.x utilisation
Pour Python 2.7 utilisation
Grâce