J'ai un dictionnaire qui ressemble à ceci: 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 ( Cela revient maintenant lorsque je l'exécute: P> diffs code> est le nom de la dict ci-dessus): p>
return sorted(self.diffs.keys(), key=lambda x: x[1], reverse=True)
IndexError: string index out of range
4 Réponses :
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)
Je l'ai changé à cela, et je reçois une ordonnance étrange du programme, comme dans ma question modifiée.
Vous passez la clé comme argument à, euh, clé code>.
Vous avez oublié le inverse = true code> partie.
Vous essayez de trier sur les touches du dictionnaire, pas les valeurs. Remplacez votre vient de remarquer que vous ne voulez que les clés. Avec ma suggestion, vous devez envelopper le tri avec self.diffs.keys () code> appel avec
self.diffs.items () code>, puis il devrait fonctionner (mais conserver la Lambda ou utiliser
opérateur.Itempster (1) code>. TULELLES TRY COMMENCE AVEC LE PREMIER ÉLÉMENT, vous n'avez donc pas à vous soucier de cela.) P>
zip () [0] code> (en veillant à décompresser la liste résultante des tuples du tri par préfixe avec
* code> dans l'appel à
zip () code>). p>
Vous êtes proche. Essayez cela à la place:
return sorted(self.diffs.keys(), key = lambda x: self.diffs[x][0], reverse = True)
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 code>