Translated howto sorting page

This commit is contained in:
Eric Régnier 2017-11-11 17:36:38 +01:00 committed by Julien Palard
parent 707f05d2d7
commit 2f248e87a2

View File

@ -19,7 +19,7 @@ msgstr ""
#: ../Doc/howto/sorting.rst:4 #: ../Doc/howto/sorting.rst:4
msgid "Sorting HOW TO" msgid "Sorting HOW TO"
msgstr "" msgstr "Guide pour le tri"
#: ../Doc/howto/sorting.rst:0 #: ../Doc/howto/sorting.rst:0
msgid "Author" msgid "Author"
@ -27,7 +27,7 @@ msgstr ""
#: ../Doc/howto/sorting.rst:6 #: ../Doc/howto/sorting.rst:6
msgid "Andrew Dalke and Raymond Hettinger" msgid "Andrew Dalke and Raymond Hettinger"
msgstr "" msgstr "Andrew Dalke et Raymond Hettinger"
#: ../Doc/howto/sorting.rst:0 #: ../Doc/howto/sorting.rst:0
msgid "Release" msgid "Release"
@ -35,7 +35,7 @@ msgstr "Version"
#: ../Doc/howto/sorting.rst:7 #: ../Doc/howto/sorting.rst:7
msgid "0.1" msgid "0.1"
msgstr "" msgstr "0.1"
#: ../Doc/howto/sorting.rst:10 #: ../Doc/howto/sorting.rst:10
msgid "" msgid ""
@ -43,22 +43,29 @@ msgid ""
"in-place. There is also a :func:`sorted` built-in function that builds a " "in-place. There is also a :func:`sorted` built-in function that builds a "
"new sorted list from an iterable." "new sorted list from an iterable."
msgstr "" msgstr ""
"Les listes Python ont une méthode native :meth:`list.sort` qui modifie les "
"listes elles-mêmes. Il y a également une fonction native :func:`sorted` qui "
"construit une nouvelle liste triée depuis un itérable."
#: ../Doc/howto/sorting.rst:14 #: ../Doc/howto/sorting.rst:14
msgid "" msgid ""
"In this document, we explore the various techniques for sorting data using " "In this document, we explore the various techniques for sorting data using "
"Python." "Python."
msgstr "" msgstr ""
"Dans ce document, nous explorons différentes techniques pour trier les "
"données en Python."
#: ../Doc/howto/sorting.rst:18 #: ../Doc/howto/sorting.rst:18
msgid "Sorting Basics" msgid "Sorting Basics"
msgstr "" msgstr "Les bases du tri"
#: ../Doc/howto/sorting.rst:20 #: ../Doc/howto/sorting.rst:20
msgid "" msgid ""
"A simple ascending sort is very easy: just call the :func:`sorted` function. " "A simple ascending sort is very easy: just call the :func:`sorted` function. "
"It returns a new sorted list::" "It returns a new sorted list::"
msgstr "" msgstr ""
"Un tri ascendant simple est très facile : il suffit d'appeler la fonction :"
"func:`sorted`. Elle renvoie une nouvelle liste triée : ::"
#: ../Doc/howto/sorting.rst:26 #: ../Doc/howto/sorting.rst:26
msgid "" msgid ""
@ -67,26 +74,37 @@ msgid ""
"than :func:`sorted` - but if you don't need the original list, it's slightly " "than :func:`sorted` - but if you don't need the original list, it's slightly "
"more efficient." "more efficient."
msgstr "" msgstr ""
"Vous pouvez aussi utiliser la méthode :meth:`list.sort`. Elle modifie la "
"liste elle-même (et renvoie ``None`` pour éviter les confusions). "
"Habituellement, cette méthode est moins pratique que la fonction :func:"
"`sorted` - mais si vous n'avez pas besoin de la liste originale, cette "
"technique est légèrement plus efficace."
#: ../Doc/howto/sorting.rst:36 #: ../Doc/howto/sorting.rst:36
msgid "" msgid ""
"Another difference is that the :meth:`list.sort` method is only defined for " "Another difference is that the :meth:`list.sort` method is only defined for "
"lists. In contrast, the :func:`sorted` function accepts any iterable." "lists. In contrast, the :func:`sorted` function accepts any iterable."
msgstr "" msgstr ""
"Une autre différence est que la méthode :meth:`list.sort` est seulement "
"définie pour les listes. Au contraire, la fonction :func:`sorted` accepte "
"n'importe quel itérable."
#: ../Doc/howto/sorting.rst:43 #: ../Doc/howto/sorting.rst:43
msgid "Key Functions" msgid "Key Functions"
msgstr "" msgstr "Fonctions Clef"
#: ../Doc/howto/sorting.rst:45 #: ../Doc/howto/sorting.rst:45
msgid "" msgid ""
"Both :meth:`list.sort` and :func:`sorted` have a *key* parameter to specify " "Both :meth:`list.sort` and :func:`sorted` have a *key* parameter to specify "
"a function to be called on each list element prior to making comparisons." "a function to be called on each list element prior to making comparisons."
msgstr "" msgstr ""
":meth:`list.sort` et :func:`sorted` ont un paramètre nommé *key* afin de "
"spécifier une fonction qui peut être appelée sur chaque élément de la liste "
"afin d'effectuer des comparaisons."
#: ../Doc/howto/sorting.rst:48 #: ../Doc/howto/sorting.rst:48
msgid "For example, here's a case-insensitive string comparison:" msgid "For example, here's a case-insensitive string comparison:"
msgstr "" msgstr "Par exemple, voici une comparaison de texte insensible à la casse:"
#: ../Doc/howto/sorting.rst:53 #: ../Doc/howto/sorting.rst:53
msgid "" msgid ""
@ -94,21 +112,29 @@ msgid ""
"argument and returns a key to use for sorting purposes. This technique is " "argument and returns a key to use for sorting purposes. This technique is "
"fast because the key function is called exactly once for each input record." "fast because the key function is called exactly once for each input record."
msgstr "" msgstr ""
"La valeur du paramètre *key* devrait être une fonction qui prend un seul "
"argument et renvoie une clef à utiliser à des fins de tri. Cette technique "
"est rapide car la fonction clef est appelée exactement une seule fois pour "
"chaque enregistrement en entrée."
#: ../Doc/howto/sorting.rst:57 #: ../Doc/howto/sorting.rst:57
msgid "" msgid ""
"A common pattern is to sort complex objects using some of the object's " "A common pattern is to sort complex objects using some of the object's "
"indices as keys. For example:" "indices as keys. For example:"
msgstr "" msgstr ""
"Un usage fréquent est de faire un tri sur des objets complexes en utilisant "
"les indices des objets en tant que clef. Par exemple :"
#: ../Doc/howto/sorting.rst:68 #: ../Doc/howto/sorting.rst:68
msgid "" msgid ""
"The same technique works for objects with named attributes. For example:" "The same technique works for objects with named attributes. For example:"
msgstr "" msgstr ""
"La même technique marche pour des objets avec des attributs nommés. Par "
"exemple :"
#: ../Doc/howto/sorting.rst:87 #: ../Doc/howto/sorting.rst:87
msgid "Operator Module Functions" msgid "Operator Module Functions"
msgstr "" msgstr "Fonctions du Module *operator*"
#: ../Doc/howto/sorting.rst:89 #: ../Doc/howto/sorting.rst:89
msgid "" msgid ""
@ -117,20 +143,29 @@ msgid ""
"`operator` module has :func:`~operator.itemgetter`, :func:`~operator." "`operator` module has :func:`~operator.itemgetter`, :func:`~operator."
"attrgetter`, and a :func:`~operator.methodcaller` function." "attrgetter`, and a :func:`~operator.methodcaller` function."
msgstr "" msgstr ""
"Les fonctions clef utilisées ci-dessus sont courantes, donc Python fournit "
"des fonctions permettant de rendre plus simple et plus rapide l'usage des "
"fonctions d'accesseur. Le module :mod:`operator` contient les fonctions :"
"func:`~operator.itemgetter`, :func:`~operator.attrgetter`, et :func:"
"`~operator.methodcaller`."
#: ../Doc/howto/sorting.rst:94 #: ../Doc/howto/sorting.rst:94
msgid "Using those functions, the above examples become simpler and faster:" msgid "Using those functions, the above examples become simpler and faster:"
msgstr "" msgstr ""
"En utilisant ces fonctions, les exemples au dessus deviennent plus simples "
"et plus rapides :"
#: ../Doc/howto/sorting.rst:104 #: ../Doc/howto/sorting.rst:104
msgid "" msgid ""
"The operator module functions allow multiple levels of sorting. For example, " "The operator module functions allow multiple levels of sorting. For example, "
"to sort by *grade* then by *age*:" "to sort by *grade* then by *age*:"
msgstr "" msgstr ""
"Les fonctions du module *operator* permettent plusieurs niveaux de tri. Par "
"exemple, pour trier par *grade* puis par *age* :"
#: ../Doc/howto/sorting.rst:114 #: ../Doc/howto/sorting.rst:114
msgid "Ascending and Descending" msgid "Ascending and Descending"
msgstr "" msgstr "Ascendant et Descendant"
#: ../Doc/howto/sorting.rst:116 #: ../Doc/howto/sorting.rst:116
msgid "" msgid ""
@ -138,10 +173,14 @@ msgid ""
"a boolean value. This is used to flag descending sorts. For example, to get " "a boolean value. This is used to flag descending sorts. For example, to get "
"the student data in reverse *age* order:" "the student data in reverse *age* order:"
msgstr "" msgstr ""
":meth:`list.sort` and :func:`sorted` acceptent un paramètre nommé *reverse* "
"avec une valeur booléenne. C'est utilisé pour déterminer l'ordre descendant "
"des tris. Par exemple, pour avoir les données des étudiants dans l'ordre "
"inverse par *age* :"
#: ../Doc/howto/sorting.rst:127 #: ../Doc/howto/sorting.rst:127
msgid "Sort Stability and Complex Sorts" msgid "Sort Stability and Complex Sorts"
msgstr "" msgstr "Stabilité des Tris et Tris Complexes"
#: ../Doc/howto/sorting.rst:129 #: ../Doc/howto/sorting.rst:129
msgid "" msgid ""
@ -149,12 +188,18 @@ msgid ""
"Sorting_algorithm#Stability>`_\\. That means that when multiple records have " "Sorting_algorithm#Stability>`_\\. That means that when multiple records have "
"the same key, their original order is preserved." "the same key, their original order is preserved."
msgstr "" msgstr ""
"Les tris sont garantis `stables <https://fr.wikipedia.org/wiki/"
"Algorithme_de_tri#Caract.C3.A8re_stable>`_\\. Cela signifie que lorsque "
"plusieurs enregistrements on la même clef, leur ordre original est préservé."
#: ../Doc/howto/sorting.rst:137 #: ../Doc/howto/sorting.rst:137
msgid "" msgid ""
"Notice how the two records for *blue* retain their original order so that " "Notice how the two records for *blue* retain their original order so that "
"``('blue', 1)`` is guaranteed to precede ``('blue', 2)``." "``('blue', 1)`` is guaranteed to precede ``('blue', 2)``."
msgstr "" msgstr ""
"Notez comme les deux enregistrements pour *blue* gardent leur ordre original "
"et que par conséquent il est garanti que ``('blue', 1)`` précède ``('blue', "
"2)``."
#: ../Doc/howto/sorting.rst:140 #: ../Doc/howto/sorting.rst:140
msgid "" msgid ""
@ -162,6 +207,10 @@ msgid ""
"steps. For example, to sort the student data by descending *grade* and then " "steps. For example, to sort the student data by descending *grade* and then "
"ascending *age*, do the *age* sort first and then sort again using *grade*:" "ascending *age*, do the *age* sort first and then sort again using *grade*:"
msgstr "" msgstr ""
"Cette propriété fantastique vous permet de construire des tris complexes "
"dans des tris en plusieurs étapes. Par exemple, afin de sortir les données "
"des étudiants en ordre descendant par *grade* puis en ordre ascendant par "
"*age*, effectuez un tri par *age* en premier puis un second tri par *grade* :"
#: ../Doc/howto/sorting.rst:148 #: ../Doc/howto/sorting.rst:148
msgid "" msgid ""
@ -169,35 +218,46 @@ msgid ""
"Python does multiple sorts efficiently because it can take advantage of any " "Python does multiple sorts efficiently because it can take advantage of any "
"ordering already present in a dataset." "ordering already present in a dataset."
msgstr "" msgstr ""
"L'algorithme `Timsort <https://fr.wikipedia.org/wiki/Timsort>`_ utilisé dans "
"Python effectue de multiples tris efficacement parce qu'il peut tirer "
"avantage de n'importe quel ordre de existant dans un jeu de données."
#: ../Doc/howto/sorting.rst:153 #: ../Doc/howto/sorting.rst:153
msgid "The Old Way Using Decorate-Sort-Undecorate" msgid "The Old Way Using Decorate-Sort-Undecorate"
msgstr "" msgstr "La méthode traditionnelle utilisant Decorate-Sort-Undecorate"
#: ../Doc/howto/sorting.rst:155 #: ../Doc/howto/sorting.rst:155
msgid "This idiom is called Decorate-Sort-Undecorate after its three steps:" msgid "This idiom is called Decorate-Sort-Undecorate after its three steps:"
msgstr "" msgstr ""
"Cette technique est appelée Decorate-Sort-Undecorate et se base sur trois "
"étapes :"
#: ../Doc/howto/sorting.rst:157 #: ../Doc/howto/sorting.rst:157
msgid "" msgid ""
"First, the initial list is decorated with new values that control the sort " "First, the initial list is decorated with new values that control the sort "
"order." "order."
msgstr "" msgstr ""
"Premièrement, la liste de départ est décorée avec les nouvelles valeurs qui "
"contrôlent l'ordre du tri."
#: ../Doc/howto/sorting.rst:159 #: ../Doc/howto/sorting.rst:159
msgid "Second, the decorated list is sorted." msgid "Second, the decorated list is sorted."
msgstr "" msgstr "En second lieu, la liste décorée est triée."
#: ../Doc/howto/sorting.rst:161 #: ../Doc/howto/sorting.rst:161
msgid "" msgid ""
"Finally, the decorations are removed, creating a list that contains only the " "Finally, the decorations are removed, creating a list that contains only the "
"initial values in the new order." "initial values in the new order."
msgstr "" msgstr ""
"Enfin, la décoration est supprimée, créant ainsi une liste qui contient "
"seulement la valeur initiale dans le nouvel ordre."
#: ../Doc/howto/sorting.rst:164 #: ../Doc/howto/sorting.rst:164
msgid "" msgid ""
"For example, to sort the student data by *grade* using the DSU approach:" "For example, to sort the student data by *grade* using the DSU approach:"
msgstr "" msgstr ""
"Par exemple, pour trier les données étudiant par *grade* en utilisant "
"l'approche DSU :"
#: ../Doc/howto/sorting.rst:171 #: ../Doc/howto/sorting.rst:171
msgid "" msgid ""
@ -205,18 +265,25 @@ msgid ""
"items are compared; if they are the same then the second items are compared, " "items are compared; if they are the same then the second items are compared, "
"and so on." "and so on."
msgstr "" msgstr ""
"Cette technique marche parsce que les tuples sont comparés par ordre "
"lexicographique; les premiers objets sont comparés; si il y a des objets "
"identiques, alors l'objet suivant est comparé, et ainsi de suite."
#: ../Doc/howto/sorting.rst:175 #: ../Doc/howto/sorting.rst:175
msgid "" msgid ""
"It is not strictly necessary in all cases to include the index *i* in the " "It is not strictly necessary in all cases to include the index *i* in the "
"decorated list, but including it gives two benefits:" "decorated list, but including it gives two benefits:"
msgstr "" msgstr ""
"Il n'est pas strictement nécessaire dans tous les cas dinclure l'indice *i* "
"dans la liste décorée, mais l'inclure donne deux avantages :"
#: ../Doc/howto/sorting.rst:178 #: ../Doc/howto/sorting.rst:178
msgid "" msgid ""
"The sort is stable -- if two items have the same key, their order will be " "The sort is stable -- if two items have the same key, their order will be "
"preserved in the sorted list." "preserved in the sorted list."
msgstr "" msgstr ""
"Le tri est stable -- si deux objets on la même clef, leur ordre sera "
"préservé dans la liste triée."
#: ../Doc/howto/sorting.rst:181 #: ../Doc/howto/sorting.rst:181
msgid "" msgid ""
@ -225,6 +292,10 @@ msgid ""
"example the original list could contain complex numbers which cannot be " "example the original list could contain complex numbers which cannot be "
"sorted directly." "sorted directly."
msgstr "" msgstr ""
"Les objets d'origine ne sont pas nécessairement comparables car l'ordre des "
"tuples décorés sera déterminé par au plus les deux premiers objets. Donc par "
"exemple la liste originale pourrait contenir des nombres complexes qui "
"pourraient ne pas être triés directement."
#: ../Doc/howto/sorting.rst:186 #: ../Doc/howto/sorting.rst:186
msgid "" msgid ""
@ -232,16 +303,21 @@ msgid ""
"org/wiki/Schwartzian_transform>`_\\, after Randal L. Schwartz, who " "org/wiki/Schwartzian_transform>`_\\, after Randal L. Schwartz, who "
"popularized it among Perl programmers." "popularized it among Perl programmers."
msgstr "" msgstr ""
"Un autre nom pour cette technique est `Schwartzian transform <https://en."
"wikipedia.org/wiki/Schwartzian_transform>`_\\, après que Randal L. Schwartz "
"l'ait popularisé chez les développeurs Perl."
#: ../Doc/howto/sorting.rst:190 #: ../Doc/howto/sorting.rst:190
msgid "" msgid ""
"Now that Python sorting provides key-functions, this technique is not often " "Now that Python sorting provides key-functions, this technique is not often "
"needed." "needed."
msgstr "" msgstr ""
"Maintenant que le tri Python fournit des fonctions-clef, cette technique "
"n'est plus souvent utilisée."
#: ../Doc/howto/sorting.rst:194 #: ../Doc/howto/sorting.rst:194
msgid "The Old Way Using the *cmp* Parameter" msgid "The Old Way Using the *cmp* Parameter"
msgstr "" msgstr "La méthode traditionnelle d'utiliser le paramètre *cmp*"
#: ../Doc/howto/sorting.rst:196 #: ../Doc/howto/sorting.rst:196
msgid "" msgid ""
@ -250,6 +326,11 @@ msgid ""
"arguments. Instead, all of the Py2.x versions supported a *cmp* parameter to " "arguments. Instead, all of the Py2.x versions supported a *cmp* parameter to "
"handle user specified comparison functions." "handle user specified comparison functions."
msgstr "" msgstr ""
"Plusieurs construction données dans ce guide se basent sur Python 2.4 ou "
"plus. Avant cela, il n'y avait pas la fonction :func:`sorted` et la méthode :"
"meth:`list.sort` ne prenait pas d'arguments nommés. À la place, toutes les "
"versions Py2.x utilisaient un paramètre *cmp* pour prendre en charge les "
"fonctions de comparaisons définies par les utilisateurs."
#: ../Doc/howto/sorting.rst:201 #: ../Doc/howto/sorting.rst:201
msgid "" msgid ""
@ -257,6 +338,9 @@ msgid ""
"effort to simplify and unify the language, eliminating the conflict between " "effort to simplify and unify the language, eliminating the conflict between "
"rich comparisons and the :meth:`__cmp__` magic method)." "rich comparisons and the :meth:`__cmp__` magic method)."
msgstr "" msgstr ""
"En Py3.0, le paramètre *cmp* à été supprimé complètement (dans le cadre d'un "
"effort plus général pour simplifier et unifier le langage, en éliminant le "
"conflit entre les comparaisons riches et la méthode magique :meth:`__cmp__`)."
#: ../Doc/howto/sorting.rst:205 #: ../Doc/howto/sorting.rst:205
msgid "" msgid ""
@ -265,10 +349,15 @@ msgid ""
"then return a negative value for less-than, return zero if they are equal, " "then return a negative value for less-than, return zero if they are equal, "
"or return a positive value for greater-than. For example, we can do:" "or return a positive value for greater-than. For example, we can do:"
msgstr "" msgstr ""
"En Py2.x, le tri permettait en paramètre une fonction optionnelle qui peut "
"être appelée pour faire des comparaisons. Cette fonction devrait prendre "
"deux arguments à comparer pour renvoyer une valeur négative pour inférieur-"
"à, renvoyer zéro si ils sont égaux, ou renvoyer une valeur positive pour "
"supérieur-à. Par exemple, nous pouvons faire :"
#: ../Doc/howto/sorting.rst:215 #: ../Doc/howto/sorting.rst:215
msgid "Or you can reverse the order of comparison with:" msgid "Or you can reverse the order of comparison with:"
msgstr "" msgstr "Ou nous pouvons inverser l'ordre de comparaison avec :"
#: ../Doc/howto/sorting.rst:222 #: ../Doc/howto/sorting.rst:222
msgid "" msgid ""
@ -276,26 +365,36 @@ msgid ""
"have the user supplying a comparison function and you need to convert that " "have the user supplying a comparison function and you need to convert that "
"to a key function. The following wrapper makes that easy to do::" "to a key function. The following wrapper makes that easy to do::"
msgstr "" msgstr ""
"En portant du code depuis Python 2.X vers 3.x, des problèmes peuvent "
"survenir quand des utilisateurs fournissent une fonction de comparaison et "
"qu'il faut convertir cette fonction en une fonction-clef. La fonction "
"d'encapsulation suivante rend cela plus facile à faire : ::"
#: ../Doc/howto/sorting.rst:245 #: ../Doc/howto/sorting.rst:245
msgid "To convert to a key function, just wrap the old comparison function:" msgid "To convert to a key function, just wrap the old comparison function:"
msgstr "" msgstr ""
"Pour convertir une fonction clef, ils suffit d'encapsuler l'ancienne "
"fonction de comparaison :"
#: ../Doc/howto/sorting.rst:256 #: ../Doc/howto/sorting.rst:256
msgid "" msgid ""
"In Python 3.2, the :func:`functools.cmp_to_key` function was added to the :" "In Python 3.2, the :func:`functools.cmp_to_key` function was added to the :"
"mod:`functools` module in the standard library." "mod:`functools` module in the standard library."
msgstr "" msgstr ""
"En Python 3.2, la fonction :func:`functools.cmp_to_key` à été ajoutée au "
"module :mod:`functools` dans la librairie standard."
#: ../Doc/howto/sorting.rst:260 #: ../Doc/howto/sorting.rst:260
msgid "Odd and Ends" msgid "Odd and Ends"
msgstr "" msgstr "Curiosités et Conclusion"
#: ../Doc/howto/sorting.rst:262 #: ../Doc/howto/sorting.rst:262
msgid "" msgid ""
"For locale aware sorting, use :func:`locale.strxfrm` for a key function or :" "For locale aware sorting, use :func:`locale.strxfrm` for a key function or :"
"func:`locale.strcoll` for a comparison function." "func:`locale.strcoll` for a comparison function."
msgstr "" msgstr ""
"Pour du tri de texte localisé, utilisez :func:`locale.strxfrm` en tant que "
"fonction clef ou :func:`locale.strcoll` comme fonction de comparaison."
#: ../Doc/howto/sorting.rst:265 #: ../Doc/howto/sorting.rst:265
msgid "" msgid ""
@ -304,6 +403,10 @@ msgid ""
"simulated without the parameter by using the builtin :func:`reversed` " "simulated without the parameter by using the builtin :func:`reversed` "
"function twice:" "function twice:"
msgstr "" msgstr ""
"Le paramètre *reverse* maintient toujours un tri stable (de telle sorte que "
"les enregistrements avec des clef égales gardent le même ordre). Notez que "
"cet effet peut être simulé sans le paramètre en utilisant la fonction "
"native :func:`reversed` deux fois :"
#: ../Doc/howto/sorting.rst:277 #: ../Doc/howto/sorting.rst:277
msgid "" msgid ""
@ -311,6 +414,10 @@ msgid ""
"comparisons between two objects. So, it is easy to add a standard sort order " "comparisons between two objects. So, it is easy to add a standard sort order "
"to a class by defining an :meth:`__lt__` method::" "to a class by defining an :meth:`__lt__` method::"
msgstr "" msgstr ""
"Il est garanti que les routines de tri utilisent les méthodes :meth:`__lt__` "
"lorsqu'elles effectuent des comparaisons entre deux objets. Donc il est "
"facile d'ajouter un ordre de tri standard à une classe en définissant sa "
"méthode :meth:`__lt__` : ::"
#: ../Doc/howto/sorting.rst:285 #: ../Doc/howto/sorting.rst:285
msgid "" msgid ""
@ -319,3 +426,8 @@ msgid ""
"grades are stored in a dictionary, they can be used to sort a separate list " "grades are stored in a dictionary, they can be used to sort a separate list "
"of student names:" "of student names:"
msgstr "" msgstr ""
"Les fonctions clef n'ont pas besoin de dépendre directement des objets "
"triés. Une fonction clef peut aussi accéder à des ressources externes. En "
"l'occurrence, si les grades des étudiants sont stockés dans un dictionnaire, "
"ils peuvent être utilisés pour trier une liste différentes de noms "
"d'étudiants :"