Python >> Tutoriel Python >  >> Python

Dict to List - Comment convertir un dictionnaire en liste en Python

Résumé :Pour convertir un dictionnaire en une liste de tuples, utilisez le dict.items() méthode pour obtenir un itérable de (key, value) paires et convertissez-le en une liste en utilisant le list(...) constructeur :list(dict.items()) . Pour modifier chaque paire valeur/clé avant de la stocker dans la liste, vous pouvez utiliser la déclaration de compréhension de liste [(k', v') for k, v in dict.items()] remplaçant k' et v' avec vos modifications spécifiques.

Dans mes projets de code, je trouve souvent que choisir la bonne structure de données est une condition préalable importante pour écrire un code propre et efficace. Dans cet article, vous apprendrez la manière la plus pythonique de convertir un dictionnaire en liste .

Problème :Étant donné un dictionnaire de key:value paires. Convertissez-le en une liste de (key, value) tuples.

Exemple :Soit le dictionnaire suivant.

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

Vous voulez le convertir en une liste de (key, value) tuple :

[('Alice', 19), ('Bob', 23), ('Carl', 47)]

Vous pouvez obtenir un aperçu rapide des méthodes examinées dans cet article suivant :

Exercice :Modifier la structure de données des éléments du dictionnaire. Ça marche toujours ?

Plongeons-nous dans les méthodes !

Méthode 1 : Liste des tuples avec dict.items() + list()

La première approche utilise la méthode du dictionnaire dict.items() pour récupérer un itérable de (key, value) tuples. La seule chose qui reste est de le convertir en une liste en utilisant le list() intégré constructeur.

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

# Method 1
t = list(d.items())
print(t)
# [('Alice', 19), ('Bob', 23), ('Carl', 47)]

La variable t contient maintenant une liste de (key, value) tuples. Notez que dans de nombreux cas, il n'est pas nécessaire de le convertir en liste et, par conséquent, d'instancier la structure de données en mémoire.

Par exemple, si vous voulez boucler sur tous les (key, value) paires dans le dictionnaire, vous pouvez le faire sans conversion :

for k,v in d.items():
    s = str(k) + '->' + str(v)
    print(s)
'''
Alice->19
Bob->23
Carl->47
'''

Utilisation du items() La méthode sur l'objet dictionnaire est la méthode la plus Pythonique si tout ce que vous voulez est de récupérer une liste de (key, value) paires. Cependant, que se passe-t-il si vous souhaitez obtenir une liste de clés, en ignorant les valeurs pour l'instant ?

Méthode 2 :Liste des clés avec dict.keys()

Pour obtenir une liste de valeurs clés, utilisez le dict.keys() et passez l'itérable résultant dans un list() constructeur.

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

# Method 2
t = list(d.keys())
print(t)
# ['Alice', 'Bob', 'Carl']

De même, vous souhaiterez peut-être obtenir une liste de valeurs.

Méthode 3 :Liste de valeurs avec dict.values()

Pour obtenir une liste de valeurs clés, utilisez le dict.values() et passez l'itérable résultant dans un list() constructeur.

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

# Method 3
t = list(d.values())
print(t)
# [19, 23, 47]

Mais que se passe-t-il si vous souhaitez modifier chaque (key, value) tuple ? Étudions quelques alternatives.

Méthode 4 :Compréhension de la liste avec dict.items()

La compréhension de liste est une manière compacte de créer des listes. La formule simple est [expression + context] .

  • Expression : Que faire de chaque élément de la liste ?
  • Contexte : Quels éléments sélectionner ? Le contexte consiste en un nombre arbitraire de for et if déclarations.

Vous pouvez utiliser la compréhension de liste pour modifier chaque (key, value) paire du dictionnaire d'origine avant de stocker le résultat dans la nouvelle liste.

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

# Method 4
t = [(k[:3], v-1) for k, v in d.items()]
print(t)
# [('Ali', 18), ('Bob', 22), ('Car', 46)]

Vous transformez chaque clé en une chaîne de trois caractères à l'aide du découpage et réduisez chaque valeur de un.

Méthode 5 :zip() avec dict.keys() et dict.values()

Juste pour la compréhension, vous pourriez (théoriquement) utiliser le zip() fonction pour créer une liste de tuples :

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

# Method 5
t = list(zip(d.keys(), d.values()))
print(t)
# [('Alice', 19), ('Bob', 23), ('Carl', 47)]

Cependant, il n'y a aucun avantage par rapport à la simple utilisation du dict.items() méthode. Cependant, je voulais vous montrer ceci parce que le zip() La fonction est fréquemment utilisée en Python et il est important que vous la compreniez.

Méthode 6 :Boucle de base

La dernière méthode utilise une boucle for de base - ce n'est pas la pire façon de procéder ! Bien sûr, un pro de Python utiliserait les méthodes les plus Pythoniques que je vous ai montrées ci-dessus. Mais l'utilisation d'une boucle for de base est parfois préférable, surtout si vous souhaitez pouvoir personnaliser le code ultérieurement (par exemple, en augmentant la complexité du corps de la boucle).

d = {'Alice': 19, 'Bob': 23, 'Carl': 47}

# Method 6
t = []
for k, v in d.items():
    t.append((k,v))
print(t)
# [('Alice', 19), ('Bob', 23), ('Carl', 47)]

Une boucle for sur une seule ligne ou une instruction de compréhension de liste n'est pas la manière la plus Pythonique de convertir un dictionnaire en liste Python si vous souhaitez modifier chaque nouvel élément de liste à l'aide d'une expression de corps plus compliquée. Dans ce cas, une simple boucle for est votre meilleur choix !

Articles associés :

  • Conversion de liste en dictée
  • Comment convertir une liste de listes en dictionnaire en Python ?
  • Guide ultime des dictionnaires
  • Guide ultime des listes

Humour de programmeur

Question :Pourquoi les programmeurs confondent-ils toujours Halloween et Noël ?
Répondre  : Parce que le 31 octobre est égal au 25 décembre.

(Si vous ne l'avez pas compris, lisez nos articles sur le oct() et int() Fonctions intégrées Python !)