Trier par ordre aphabétique une liste de dictionnaires
RésoluBonjour,
J'ai une liste de dictionnaires avec des noms et prénoms, je voudrais savoir comment je peux trier ma liste de dictionnaire par ordre alphabétique.
Agendas = {['nom': 'Macron', 'prenom': 'stephane', 'adresse': 'champs de mars','ville': 'Paris'], ['nom': 'mathieu', 'prenom': 'claude', 'adresse': 'place de la mairie','ville': 'Marseille'] , ['nom': 'dubosc', 'prenom': 'jen-pierre', 'adresse': 'xxxxx','ville': 'Paris']}
comment je dois faire pour trier les contacts par ordre alphabétique ?
Merci d'avance pour vos avis et conseils.
Linux / Firefox 110.0
- Le fichier contient une liste de prénoms. triez ce tableau par ordre alphabétique des prénoms. quel mot est formé par les 6 premières lettres de la colonne code ?
- Comment trier par ordre alphabétique sur excel - Guide
- Fichier bin - Guide
- Code ascii - Guide
- Dans le fichier, générez ce tableau automatiquement (tableau croisé dynamique ou table de pilote) à partir des quatre premières colonnes. - Guide
- Liste déroulante excel - Guide
2 réponses
Bonsoir,
.
Sans doute avec OrderedDict.
https://docs.python.org/3/library/collections.html#collections.OrderedDict
Bonjour xunil2003,
Préliminaires
Ce que tu as codé dans ton message est syntaxiquement incorrect (ensemble de liste mal formées + pas toutes séparées par des virgules) :
Agendas = { ['nom': 'Macron', 'prenom': 'stephane', 'adresse': 'champs de mars', 'ville': 'Paris'], ['nom': 'mathieu', 'prenom': 'claude', 'adresse': 'place de la mairie', 'ville': 'Marseille'] ['nom': 'dubosc', 'prenom': 'jean-pierre', 'adresse': 'xxxxx', 'ville': 'Paris'] }
De plus on évite de nommer une variable avec une majuscule (c'est réservé aux classes). Ce pauvre Jean-Pierre a également eu son prénom écorché et les majuscules manquent.
Note que le fait que les noms/prénoms commencent par une minuscule/majuscule a un impact (les caractères majuscules précèdent les caractères minuscules en python). C'est pourquoi il est sans doute une bonne idée de s'assurer avant de faire le tri que les valeurs associées au prénom et au nom sont bien composés de mots commençant par des majuscules :
agenda = [ { k : v if k not in {"nom", "prenom"} else v.title() for (k, v) in contact.items() } for contact in agenda ]
Bref, après correction, je pense que tu as voulu écrire ceci :
agenda = [ { 'nom': 'Macron', 'prenom': 'Stéphane', 'adresse': 'Champs de mars', 'ville': 'Paris' }, { 'nom': 'Mathieu', 'prenom': 'Claude', 'adresse': 'Place de la mairie', 'ville': 'Marseille' }, { 'nom': 'Dubosc', 'prenom': 'Jean-pierre', 'adresse': 'xxxxx', 'ville': 'Paris' }, ]
Réponse à ta question sous ces hypothèses
Comme agenda est de type liste, tu peux tirer la liste avec la fonction sorted, qui prend en paramètre une callback d'associer à chaque élément de la liste une valeur (appelée clé) puis de trier la liste selon l'ordre (croissant) <. On peut aussi trier selon l'ordre décroissant en passant le paramètre reverse=True.
Dans ton cas tu veux tirer selon l'ordre alphabétique (je suppose, le nom de famille) donc ça donnerait :
from pprint import pprint agenda = [ { 'nom': 'Macron', 'prenom': 'Stéphane', 'adresse': 'Champs de mars', 'ville': 'Paris' }, { 'nom': 'Mathieu', 'prenom': 'Claude', 'adresse': 'Place de la mairie', 'ville': 'Marseille' }, { 'nom': 'Dubosc', 'prenom': 'Jean-pierre', 'adresse': 'xxxxx', 'ville': 'Paris' }, ] agenda = sorted(agenda, key=lambda d: (d["nom"], d["prenom"])) pprint(agenda)
Résultat : on voit dans l'exemple ci-dessous que les contacts sont triés par nom croissant, puis par prénom croissant (selon l'ordre lexicographique).
[{'adresse': 'xxxxx',
'nom': 'Dubosc',
'prenom': 'Jean-pierre',
'ville': 'Paris'},
{'adresse': 'Champs de mars',
'nom': 'Macron',
'prenom': 'Stéphane',
'ville': 'Paris'},
{'adresse': 'Place de la mairie',
'nom': 'Mathieu',
'prenom': 'Claude',
'ville': 'Marseille'}]
Bonne chance
Malheureusement OrderedDict ne répond pas à la question ici, puisque la structure qui stocke les contacts n'est pas un dictionnaire. OrderedDict serait bien adapté si la clé était par exemple un couple (nom, prenom) auquel on associe les métadonnées (adresse, ville). Et dans ce cas, on ne pourrait pas gérer les homonymes, puisque par définition d'un dictionnaire, une clé apparaît au plus une fois dans un dictionnaire.