7
votes

Trier un dict avec des tuples comme des valeurs

J'ai un dictionnaire qui ressemble à ceci: xxx pré>

essentiellement, j'ai besoin d'une liste des touches dans la commande triée, triée en fonction du rang code> code> Champ dans le tuple. p>

Mon code regarde quelque chose comme ça en ce moment ( diffs code> est le nom de la dict ci-dessus): p> xxx pré>

Cela revient maintenant lorsque je l'exécute: P>

return sorted(self.diffs.keys(), key=lambda x: x[1], reverse=True)
IndexError: string index out of range


0 commentaires

4 Réponses :


11
votes

clés () code> ne vous donne que des clés et non des valeurs, vous devez donc utiliser les touches pour récupérer des valeurs à partir de la dicle si vous souhaitez trier sur eux:

return sorted(self.diffs.keys(), key=lambda x: self.diffs[x][1], reverse=True)


1 commentaires

Je l'ai changé à cela, et je reçois une ordonnance étrange du programme, comme dans ma question modifiée.



2
votes

Vous passez la clé comme argument à, euh, clé . xxx


1 commentaires

Vous avez oublié le inverse = true partie.



1
votes

Vous essayez de trier sur les touches du dictionnaire, pas les valeurs. Remplacez votre self.diffs.keys () appel avec self.diffs.items () , puis il devrait fonctionner (mais conserver la Lambda ou utiliser opérateur.Itempster (1) . TULELLES TRY COMMENCE AVEC LE PREMIER ÉLÉMENT, vous n'avez donc pas à vous soucier de cela.)

vient de remarquer que vous ne voulez que les clés. Avec ma suggestion, vous devez envelopper le tri avec zip () [0] (en veillant à décompresser la liste résultante des tuples du tri par préfixe avec * dans l'appel à zip () ).


0 commentaires

0
votes

Vous êtes proche. Essayez cela à la place:

return sorted(self.diffs.keys(), key = lambda x: self.diffs[x][0], reverse = True)


1 commentaires

Cela fonctionne, mais il semble trier dans un ordre non sensuel ... P: 3.11612504885E-05 1528 4 C: 2.50018364323E-05 2316 7 Q: -3,49014288804E-05 152 2 T: 4.45535602789E-05 2623 11 z: -0.000101817241062 491 6