2016-08-05 1 views
0

J'essaie de trier un ordereddict, mais sans chance. J'ai essayé d'utiliser la méthode trouvée à https://docs.python.org/2/library/collections.html#ordereddict-examples-and-recipesTri triéDict ne fonctionne pas

 for d in results: 
      print(d) 

     d = OrderedDict(results) 

     for key in d: 
      print(d[key]) 

     hi = OrderedDict(sorted(d.items(), key=lambda t: t[0])) 

     for key in hi: 
      print(hi[key]) 

cette imprime:

('GOOG/CPH_43740', -1.6749609142444124) 
('GOOG/CPH_CARL_B', 0.66869383328307086) 
('GOOG/CPH_CHR', 0.6270772411141563) 
('GOOG/CPH_EGE_B', -0.89015989892984237) 
('GOOG/CPH_GEN', 0.46485175444884497) 

-1.67496091424 
0.668693833283 
0.627077241114 
-0.89015989893 
0.464851754449 

-1.67496091424 
0.668693833283 
0.627077241114 
-0.89015989893 
0.464851754449 

qui ne sont pas triées par ordre décroissant. Suis-je totalement perdu ici?

+4

Vous avez explicitement classés par ordre croissant de la clé ** **, ce qui est exactement ce que vous avez . – jonrsharpe

+0

Cela n'aurait pas dû être fermé en double. Le tri par valeur est une chose; en conservant cela dans un nouveau OrderedDict en spécifiant le nouvel ordre d'insertion, vous devez déclarer un nouveau OrderedDict. (cc: @PadraicCunningham) – smci

+0

@ réponse de JacuesdeHooge est juste et je veux rediriger ["retourner un dictionnaire après le tri"] (https://stackoverflow.com/questions/41082822/return-a-dictionary-after-sorting) ici comme canonique. Cela doit être rouvert comme une question distincte en soi. – smci

Répondre

2

En supposant que vous voulez trier les chiffres, qui ont l'indice 1 plutôt que 0 dans votre tuples:

for d in results: 
     print(d) 

    d = OrderedDict(results) 

    for key in d: 
     print(d[key]) 

    hi = OrderedDict(sorted(d.items(), key=lambda t: t[1])) 

    for key in hi: 
     print(hi[key])