Trier un dictionnaire
Fermé
arthurlfbv
-
18 janv. 2023 à 17:29
mamiemando Messages postés 33566 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 11 mars 2025 - 18 janv. 2023 à 18:02
mamiemando Messages postés 33566 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 11 mars 2025 - 18 janv. 2023 à 18:02
A voir également:
- Trier un dictionnaire
- Télécharger dictionnaire larousse pdf gratuit - Télécharger - Dictionnaires & Langues
- Trier un tableau excel - Guide
- Attaque par dictionnaire - Guide
- Télécharger dictionnaire médical larousse gratuit pdf - Télécharger - Dictionnaires & Langues
- Télécharger dictionnaire français gratuit pdf - Télécharger - Bureautique
3 réponses
yg_be
Messages postés
23487
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 mars 2025
Ambassadeur
1 570
18 janv. 2023 à 17:48
18 janv. 2023 à 17:48
bonjour,
le code fonctionne bien, il te donne le résultat attendu?
Je voudrais que mon dico tri les maisons dans l'ordre de leur occurrence, dans l'exemple ci dessous ce n'est pas le cas. (j'ai change le script le précèdent exemple était mauvais).
import csv import operator from math import sqrt with open("Characters.csv", mode='r', encoding='utf-8') as f: reader = csv.DictReader(f, delimiter=';') characters_tab = [{key: value for key, value in element.items()} for element in reader] with open("Caracteristiques_des_persos.csv", mode='r', encoding='utf-8') as f: reader = csv.DictReader(f, delimiter=';') characteristics_tab = [{key: value for key, value in element.items()} for element in reader] poudlard_characters = [] for poudlard_character in characteristics_tab: for kaggle_character in characters_tab: if poudlard_character['Name'] == kaggle_character['Name']: poudlard_character.update(kaggle_character) poudlard_characters.append(poudlard_character) joueur_character = [{'Courage': 3, 'Ambition': 8, 'Intelligence': 6, 'Good': 3}] dico_k_plus_proche = {} for joueur_character_1 in poudlard_characters: dico_k_plus_proche['Distance'] = sqrt((int(joueur_character[0]['Courage']) - int(joueur_character_1['Courage'])) ** 2 + (int(joueur_character[0]['Ambition']) - int(joueur_character_1['Ambition'])) ** 2 + (int(joueur_character[0]['Intelligence']) - int(joueur_character_1['Intelligence'])) ** 2 + (int(joueur_character[0]['Good']) - int(joueur_character_1['Good'])) ** 2) joueur_character_1.update(dico_k_plus_proche) poudlard_characters.sort(key=operator.itemgetter('Distance')) dico_trie = {} occurrence_maison = 0 compteur= 0 value = 0 for element in poudlard_characters[0:5]: if element['House'] in dico_trie: value += element['Distance'] dico_trie[element['House']].update({'Occurrence': compteur+1,'Distance cumulé' : value}) else: value = element['Distance'] dico_trie[element['House']] = {'Occurrence': compteur, 'Distance cumulé' : value} print(dico_trie) dico_trie = sorted(dico_trie.items(), key=lambda item: item[0][2]) print(dico_trie)
mamiemando
Messages postés
33566
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
11 mars 2025
7 833
18 janv. 2023 à 18:02
18 janv. 2023 à 18:02
Bonjour,
Le code en lui-même dépend de fichiers csv, ce serait pas mal de les partager (au moins des csv minimaux) pour pouvoir reproduire le code.
Un dictionnaire n'est pas trié en python. Il n'y a pas de notion de comparateur de clé comme en C++.
Tu peux par contre :
- soit générer une liste triée comme tu le souhaites en utilisant la fonction sorted (comme tu as fait),
- soit utiliser un collections.OrderedDict (voir ce lien)
- soit utiliser une pandas.dataFrame et sa méthode sort_values (mais pandas dans le cas présent est complètement overkill)
- soit créer ta propre classe de dictionnaire
Bonne chance