Hello,

Je souhaite pouvoir facilement trier un dictionnaire. En l'état j'utilise "sorted" avec un paramètre et j'applique une mise en forme comme ceci (cf partie en gras):

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
#Déclaration des fonctions
def somme(list_of_name, key):
    som=sum([seq[name][key] for name in list_of_name])
    return som

def comb(m, lst):
    if m == 0: return [[]]
    return [[x] + suffix for i, x in enumerate(lst)
            for suffix in comb(m - 1, lst[i + 1:])]
 
# Déclaration des valeurs de reliques et de la base
Relique1= {'Santé':5,'Degats':6,'Armure':2,'Perforation':7,'Critique':2,
           }
Relique2= {'Santé':10,'Degats':9,'Armure':3,'Perforation':1,'Critique':4,
           }
Relique3= {'Santé':7,'Degats':17,'Armure':4,'Perforation':6,'Critique':6,
           }


Base= {'Santé':0,'Degats':0,'Armure':0,'Perforation':0,'Critique':0,
           }

seq={"Relique1":Relique1, "Relique2":Relique2,"Relique3":Relique3}

for i in seq:
 names=list(seq) 

#Calcul des combinaisons possibes
combinaisons = comb(2, names)

#calcul des valeurs des différentes combinaisons de reliques
totaux = { key: [ somme(c,key) for c in combinaisons ] for key in ("Santé","Degats","Armure","Perforation","Critique",
                                                                   ) }

#Ajout des valeurs de la Base aux résultats des combinaisons de reliques
final={}
for cle,valeurT in totaux.items():
    newval=[]
    for val in valeurT:
        newval.append(val + Base.get(cle))
        intermediaire={cle:newval}
    final.update(intermediaire)

#Triage des résultats en fonction des combinaisons    
resultat=sorted(zip( final.get("Santé"),final.get("Degats"),final.get("Armure"),final.get("Perforation"),final.get("Critique"),combinaisons) ,reverse=True)

#Mise en forme finale
for TS, TD, TA, TP, TC, v in resultat:
    print('*******************',)
    print("La combinaison",v,'\n',)
    print("Santé=",TS,'\n',"Degats=",TD,'\n',"Armure=",TA,'\n',"Perforation=",TP,'\n',"Critique=",TC,'\n',)
Ca fonctionne comme je souhaite. Les résultats sont bien triés par ordre décroissant en fonction des valeurs du paramètre "Santé".
Maintenant si je veux changer le tri des résultats en fonction par exemple de "Perforation". Je dois modifier le "sorted" pour lui mettre en paramètre "Perforation" et modifier la mise en forme finale. Un peu lourd...

Comment pourrais je faire pour que cela soit plus souple à trier sans tout changer chaque fois?

Merci d'avance.