Obs: Je sais que les listes de python ne sont pas fixées par ordre, mais pensez que celui-ci sera. Et j'utilise Python 2.4
J'ai une liste, comme (par exemple) celui-ci: p> Cette variable myList est obtenue à partir d'une fonction, et le " L'ordre de la liste renvoyée variera. Donc, parfois ce sera comme sur l'exemple. Parfois, le "rapport" viendra avant "article", etc. p> J'ai un ordre fixe que je veux sur cette liste (et n'est pas l'alphabétique). P> Dis que mon ordre fixe est: "Signaler", "Article", "Livre", ... P> Alors, ce que je veux, c'est que: Quel que soit l'ordre "MyList 'est instancié, je veux la réorganiser Rendre "rapport" rester à l'avant, "article" sur deuxième, etc ... p> Quelle est la meilleure approche pour réorganiser ma liste (prenant le premier élément du tuple de chaque élément sur la liste) en utilisant mon " Personnalisé 'ordre? P> réponse strong>: P> J'ai fini avec ceci: P> MyList est devenu une liste de dicttes, Comme ceci: p> chaque dict ayant un "ID" qui devait être trié. P> Enregistrement de l'ordre correct sur un fichier LisasSIGNAGE Le correct_order sur une liste: p> et faire: p> results = sorted([item for item in results], cmp=lambda x,y:cmp(correct_order.index(x['id']), correct_order.index(y['id'])))
5 Réponses :
Vous pouvez utiliser un dictionnaire qui vous permettrait d'accéder au "livre", de "article", etc. sans avoir à se soucier de la commande. Je mettrais les données de cette liste dans un dict qui ressemblait à ceci: Si vous souhaitez vraiment trier votre liste de la manière dont vous avez décrite, vous pouvez utiliser la liste . Trier code> avec une fonction de clé qui représente votre ordre de tri particulier ( Documentation a>). Vous avez besoin de la fonction clé comme vous devez accéder uniquement au premier élément et votre ordre de tri n'est pas également alphabétique. P> p>
wiki.python.org/moin/howto/sorting à nouveau, ce lien est la Très utile dans cette question!
Vous pouvez utiliser un dictionnaire qui ferait mapper chaque premier élément à son "poids" puis vérifier ce dictionnaire à l'intérieur d'une fonction de tri.
quelque chose comme: p>
d = { "Report": 1,
"Article": 2,
"Book": 3 }
result = sorted(mylist, key=lambda x:d[x[0]])
Mieux vaut utiliser une fonction clé plutôt que la fonction CMP obsolète qui ne quitte plus dans Python 3: Trié (myList, clé = lambda x: D [x [0]]) code>
N'essayez pas encore Python 3, alors je ne savais pas .. merci :)
Il est également recommandé pour Python 2 comme en utilisant une fonction clé est plus rapide qu'une fonction CMP. Voir docs.python.org/library/fonctions.html#sorted
Vous pouvez également utiliser l'écrire comme ceci: d = ["rapport", "article", "book"] code>, puis résultat = trié (myList, clé = lambda x: d.index (x [0]) code>
De cette façon crée un dict et tire les éléments de celui-ci dans l'ordre de cette façon utilise trier avec O (1) recherches pour la commande p>
Plus généralement, il pourrait y avoir des éléments de la mychiste qui ne sont pas dans l'ordre fixe spécifié. Cela commande selon la règle, mais laissez seul l'ordre relatif de tout en dehors de la règle:
Cette fonction trie dans une liste personnalisée, mais si un élément n'est pas dans la liste, une erreur ne sera pas générée. Cependant, cet élément sera à la fin de la ligne.
custom_order = ('fa','a','b','c','d','e')
my_list = ('e','c','fa','h','h','g')
result = sort_custom(custom_order,my_list)
print(result)