133 votes

Comment utiliser une fonction de comparaison personnalisée dans Python 3 ?

En Python 2.x Je pourrais passer une fonction personnalisée aux fonctions sorted et .sort.

>>> x=['kar','htar','har','ar']
>>>
>>> sorted(x)
['ar', 'har', 'htar', 'kar']
>>> 
>>> sorted(x,cmp=customsort)
['kar', 'htar', 'har', 'ar']

Car, en Mon La langue, les consonants viennent dans l'ordre suivant

"k","kh",....,"ht",..."h",...,"a"

Mais en Python 3.x Il semble que je ne puisse pas passer cmp mot-clé

>>> sorted(x,cmp=customsort)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'cmp' is an invalid keyword argument for this function

Existe-t-il d'autres solutions ou dois-je écrire ma propre fonction de tri ?

Note : J'ai simplifié en utilisant "k", "kh", etc. Les caractères réels sont des Unicodes et sont encore plus compliqués, parfois il y a des voyelles qui viennent avant et après les consonnes, j'ai fait une fonction de comparaison personnalisée, donc cette partie est ok. Le seul problème est que je ne peux pas passer ma fonction de comparaison personnalisée à sorted ou .sort.

-3voto

Utiliser le key à la place. Il s'agit d'une fonction qui prend la valeur à traiter et renvoie une valeur unique indiquant la clé à utiliser pour le tri.

sorted(x, key=somekeyfunc)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X