11
votes

Puis-je régler le texte par sa valeur numérique à Python?

J'ai dict dans Python avec des touches du formulaire suivant: xxx

Certains des indices n'ont aucune sous-valeur, certains ont un niveau de sous-valeurs et certains ont deux. Si j'avais seulement un sous-niveau, je pourrais les traiter tout comme des chiffres et trier numériquement. Le deuxième sous-niveau me force à les gérer tous comme des cordes. Cependant, si je les trite comme des chaînes, j'aurai 10 suivant 1 et 20 suivant 2 .

Comment puis-je régler correctement les indices?

Note: Ce que je veux vraiment faire est d'imprimer la dicte triée par index. S'il y a une meilleure façon de le faire que de le trier d'une manière ou d'une autre, c'est bien avec moi.


1 commentaires

6 Réponses :


19
votes

Vous pouvez trier les clés de la façon dont vous voulez, en les divisant sur '.' ' puis convertir chacun des composants en un entier, comme celui-ci: xxx pré>

qui retourne ceci: p> xxx pré>

Vous pouvez itérer sur cette liste des clés et tirez les valeurs hors de votre dictionnaire si nécessaire. p>

Vous pouvez également trier le résultat de MyDICT.ITEMS (), très similaire: P>

[('0', 10),
 ('1', 23),
 ('2.0', 321),
 ('2.1', 3231),
 ('3', 3),
 # ...
 ('12.1.1', 2)]


3 commentaires

Et bien sûr, vous n'avez pas besoin d'utiliser une Lambda, vous pouvez définir une fonction habituelle et passer dans le nom.


Plus rapide que la version comparateur (moins de conversions / appels de fonction).


Mise à jour de la syntaxe pour Python 3: Trié (mydic.items (), Key = Lambda A: [* Carte (int, A [0] .split ('.'))])



2
votes

Les fonctions de tri de Python peuvent prendre une fonction de comparaison personnalisée, vous devez donc simplement définir une fonction qui compare les touches de votre choix: xxx

dans ce cas, vous devriez mieux utiliser le < Code> Clé Paramètre sur Trié () , cependant. Voir Réponse de Ian Clelland pour un exemple pour cela.


2 commentaires

Il est préférable de fournir la fonction clé comme Ian le fait. La fonction de clé est appelée une fois pour chaque élément, la fonction CMP est appelée chaque fois que le tri fait une comparaison.


@gnibbler: Oui, j'ai compris qu'après la réponse de Ian, je pensais à supprimer ma réponse, mais je suppose que cela pourrait être utile pour quelqu'un qui a besoin d'un comparateur plus compliqué qui ne peut pas être fait en passant un simple clé .



0
votes

Je ferais une recherche sur "Tri du dictionnaire Python" et jetez un oeil à les réponses. Je donnerais PEP-265 une lecture aussi. Trié () fonction est ce que vous recherchez.


0 commentaires

2
votes

comme un addendum à 0 commentaires


1
votes

Pour le plaisir et l'utilité (pour Googling PPL, principalement): xxx

Utilisez comme trié (liste, CMP = CMPG) . De plus, les expulsions pourraient être pré-compilées (rarement nécessaires cependant, en réalité, avec la mise en cache de ré-module). Et, il peut être (facilement) modifié, par exemple, d'inclure des valeurs négatives (Ajouter -? à num regex, probablement) et / ou pour utiliser des valeurs de flotteur.

IT Peut-être pas très efficace, mais même avec cela, c'est assez utile.

et, UHM, il peut être utilisé comme clé = pour trier () aussi.


0 commentaires

0
votes

Il y a un bon tri HOWTO sur le site Web Python: http: //wiki.python. Org / MOIN / HOWTO / Tri . Il fait une bonne introduction au tri et discute de différentes techniques pour adapter le résultat de tri à vos besoins.


0 commentaires