9
votes

Triez une liste multidimensionnelle par un nombre variable de clés

J'ai lu Cet article et est n'a pas fini de travailler pour moi.

éditer: la fonctionnalité que je décrypting est comme la fonction de tri dans Excel ... si cela le rend plus clair EM> P> Voici ma situation, j'ai un document texte délimité par tabulation. Il y a environ 125 000 lignes et 6 colonnes par ligne (les colonnes sont séparées par un caractère d'onglets). J'ai divisé le document en une liste à deux dimensions. P>

J'essaie d'écrire une fonction générique pour trier les listes bidimensionnelles. Fondamentalement, j'aimerais avoir une fonction où je peux transmettre la grande liste et la clé d'une ou plusieurs colonnes que je voudrais trier la grande liste par. Évidemment, je voudrais que la première clé passe soit le point de tri principal, puis la deuxième touche, etc. p>

toujours confurée? P>

Voici un exemple de ce que j'aimerais faire . P>

sortByColumn(bigList, 2, 3)

Luke    16  Blue    1
Anna    17  Blue    2
Tyler   22  Blue    6
Bob     22  Blue    10
Ryan    18  Green   3
Ryan    18  Green   8
Joel    18  Orange  1
Katy    13  Pink    5
Garrett 24  Red 7
Leland  18  Yellow  9


0 commentaires

4 Réponses :


8
votes

Ceci triera par les colonnes 2 et 3: xxx


0 commentaires

1
votes

Assurez-vous que vous avez converti les chiffres en InTS, sinon ils trieront par ordre alphabétique plutôt que numériquement xxx

ou xxx


0 commentaires

11
votes
import operator:
def sortByColumn(bigList, *args)
    bigList.sort(key=operator.itemgetter(*args)) # sorts the list in place

2 commentaires

C'est fabuleux. Je n'avais jamais entendu parler de poste d'article (ou à l'attaque, que je vois aussi).


C'est exactement ce que je cherche. Merci beaucoup!



2
votes

L'idée de clé ici (jeu de mots) est d'utiliser une fonction clé qui renvoie un tuple. Ci-dessous, la fonction de clé est lambda x: (x [IDX] pour IDX dans ARG) x est défini sur l'égalité d'un élément d'Alist - c'est-à-dire une ligne de données. Il renvoie une tuple de valeurs, pas seulement une seule valeur. La méthode de tri () trie en fonction du premier élément de la liste, puis rompt les liens avec la seconde, et ainsi de suite. Voir http://wiki.python.org/moin/howto/sorting#sortsportingbykeys xxx


1 commentaires

Les chiffres doivent être convertis en INTS