Liste de tri de structure de données Python par ordre alphabétique


160

Je suis un peu confus en ce qui concerne la structure des données en python; (), []et {}. J'essaie de trier une liste simple, probablement parce que je ne peux pas identifier le type de données que je ne parviens pas à trier.

Ma liste est simple: ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

Ma question est de savoir quel type de données il s'agit, et comment trier les mots par ordre alphabétique?


Si vous voulez trier votre liste, vous pouvez utiliser "list = ['Stem', 'constitue', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] list.sort () print list».
kannanrbk

[]renferme le type de données intégré list, (voir tutorialspoint.com/python/python_lists.htm ). Les listes ne sont que des groupes de valeurs (elles peuvent contenir d'autres objets itérables, c'est-à-dire des listes imbriquées). ()renferme le fichier intégré tuple. Ils sont immuables (ne peuvent pas être modifiés). (voir tutorialspoint.com/python/python_tuples.htm ). Et {}renferme le fichier builtin dictionary. Parallèles avec un dictionnaire (pour les mots), où une «clé» serait le mot et la «valeur» serait la définition. (voir tutorialspoint.com/python/python_dictionary.htm ).
Rushy Panchal

Réponses:


232

[]désigne une liste , ()désigne un tuple et {}désigne un dictionnaire . Vous devriez jeter un œil au didacticiel officiel Python car ce sont les bases de la programmation en Python.

Ce que vous avez est une liste de chaînes. Vous pouvez le trier comme ceci:

In [1]: lst = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']

In [2]: sorted(lst)
Out[2]: ['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']

Comme vous pouvez le voir, les mots commençant par une lettre majuscule ont la préférence sur ceux commençant par une lettre minuscule. Si vous souhaitez les trier indépendamment, procédez comme suit:

In [4]: sorted(lst, key=str.lower)
Out[4]: ['constitute', 'Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim']

Vous pouvez également trier la liste dans l'ordre inverse en procédant comme suit:

In [12]: sorted(lst, reverse=True)
Out[12]: ['constitute', 'Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux']

In [13]: sorted(lst, key=str.lower, reverse=True)
Out[13]: ['Whim', 'Stem', 'Sedge', 'Intrigue', 'Eflux', 'constitute']

Remarque: si vous travaillez avec Python 3, strle type de données est-il correct pour chaque chaîne contenant du texte lisible par l'homme. Cependant, si vous devez toujours travailler avec Python 2, vous pouvez utiliser des chaînes Unicode qui ont le type de données unicodedans Python 2, et non str. Dans un tel cas, si vous avez une liste de chaînes Unicode, vous devez écrire à la key=unicode.lowerplace de key=str.lower.


En utilisant le second exemple sur un pymongo find_one()résultat à partir d' une base de données MongoDB, je reçois l' erreur: descriptor 'lower' requires a 'str' object but received a 'unicode'. Le résultat est un tableau de chaînes et mis en œuvre comme ceci: results['keywords'] = sorted(keywords['keywords'], key=str.lower). Quelqu'un sait-il comment résoudre ce problème?
user1063287

@ user1063287 Désolé pour ma réponse tardive. Dans votre cas, vous devez écrire key=unicode.lowerau lieu de key=str.lower. Cela est dû au fait que vous avez affaire à des chaînes Unicode et non à des chaînes d'octets. Veuillez vous référer au HOWTO Unicode officiel pour plus d'informations à ce sujet, en particulier pour les différences respectives entre Python 2 et 3.
pemistahl

32

Python a une fonction intégrée appelée sorted, qui vous donnera une liste triée à partir de tout itérable que vous alimentez (comme une liste ( [1,2,3]); un dict ( {1:2,3:4}, bien qu'il ne renverra qu'une liste triée des clés; un set ( {1,2,3,4) ; ou un tuple ( (1,2,3,4))).

>>> x = [3,2,1]
>>> sorted(x)
[1, 2, 3]
>>> x
[3, 2, 1]

Les listes ont également une sortméthode qui effectuera le tri sur place (x.sort () renvoie None mais modifie l'objet x).

>>> x = [3,2,1]
>>> x.sort()
>>> x
[1, 2, 3]

Les deux acceptent également un keyargument, qui devrait être un appelable (fonction / lambda) que vous pouvez utiliser pour modifier les éléments de tri.
Par exemple, pour obtenir une liste de (key,value)paires à partir d'un dict qui est trié par valeur, vous pouvez utiliser le code suivant:

>>> x = {3:2,2:1,1:5}
>>> sorted(x.items(), key=lambda kv: kv[1])  # Items returns a list of `(key,value)`-pairs
[(2, 1), (3, 2), (1, 5)]

12

Vous avez affaire à une liste python, et la trier est aussi simple que de le faire.

my_list = ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue']
my_list.sort()

11

Vous pouvez utiliser la sortedfonction intégrée.

print sorted(['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'])

4

ListName.sort()le triera par ordre alphabétique. Vous pouvez ajouter reverse=False/Trueentre parenthèses pour inverser l'ordre des éléments:ListName.sort(reverse=False)


1
Est-ce un commentaire pour Ruby?
allanberry le

3
>>> a = ()
>>> type(a)
<type 'tuple'>
>>> a = []
>>> type(a)
<type 'list'>
>>> a = {}
>>> type(a)
<type 'dict'>
>>> a =  ['Stem', 'constitute', 'Sedge', 'Eflux', 'Whim', 'Intrigue'] 
>>> a.sort()
>>> a
['Eflux', 'Intrigue', 'Sedge', 'Stem', 'Whim', 'constitute']
>>> 
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.