IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Trier des strings UTF8


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut Trier des strings UTF8
    Bonjour,

    J'ai des paires (mot, nombre) rangées dans un dictionnaire que j'essaie de trier
    par ordre alphabétique.

    Or, ces morts comportent des accents (à, é, ô, etc.) qui ne sont pas du tout pris en compte.

    J'ai adapté mon locale en "fr.FR", j'ai aussi tenté de sortir d'abord les données dans une liste pour voir si c'était plus facile avec un sort().

    Mais je n'arrive pas à trier mes données.
    Quelqu'un a une idée???

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Précise un peu plus ce que tu veux trier: donne un exemple simplifié 'avant' et 'après'.

    A noter qu'un dictionnaire 'normal' (dict) ne peut être trié. Dans les dernières versions de Python, il existe cependant un tel dictionnaire

    Précise aussi quel version de Python: 2.x ou 3.x?

    Tyrtamos

  3. #3
    Membre Expert
    Homme Profil pro
    Inscrit en
    Mars 2007
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2007
    Messages : 941
    Par défaut
    C'est à ça que sert strcoll dans le module locale:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    l = ['bec','bébé','bijou']
    l.sort()
    print l   # pas bon
     
    import locale
    locale.setlocale(locale.LC_ALL, '')
    l.sort(cmp=locale.strcoll)
    print l   # bon
    On peut aussi utiliser strxfrm:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    l.sort(key=locale.strxfrm)
    Mais ça bug en unicode en Python 2.x (http://bugs.python.org/issue2481).

  4. #4
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Bonjour !

    Précision : mon dictionnaire contient des paires MOT / NOMBRE

    Pour ce qui concerne le tri d'un dictionnaire, je crois que la fonction suivante fait ça plutôt bien à condition que l'on trie sur le nombre (d'oú l'inversion de la paire en ligne 2 de la fonction):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    def SortNombre(Dico):
     
        Dico2 = Dico.items()
        Dico2 = [(v, k) for (k, v) in Dico2]  
        Dico2.sort()
        Dico2.reverse()		
        return Dico2
    Mais, l'adaptation de cette fonction pour un tri sur le mot - comme suit - provoque une erreur de type "unhandled TypeError coercing to Unicode: need string or buffer, tuple found"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          Dico2 =  Dico.items()
          Dico2.sort(cmp=locale.strcoll)
    Si je simplifie le sort, y'a plus de plantage mais évidemment ça ne trie pas correctement les lettres accentuées :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
          Dico2 =  Dico.items()
          Dico2.sort()

  5. #5
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Désolé, mais je ne connais pas le type de dictionnaire 'Dico'.

    Et le type normal 'dict' n'a pas de méthode sort().

    ???

    Tyrtamos

  6. #6
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Pardon, il manque une information :

    Au preálable je déclare :
    W ={}

    puis j'appelle ma fonction comme suit :
    Z = SortNombre(W):

    Et là, ça me permet de récuperer le contenu du dictionnaire trié sur la valeur numérique
    du plus grand au plus petit

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 15
    Dernier message: 19/09/2011, 17h25
  2. [débutant]modifier des string
    Par calavera dans le forum SL & STL
    Réponses: 1
    Dernier message: 16/09/2005, 20h45
  3. [TList]: trier des doubles
    Par PpPool dans le forum Langage
    Réponses: 6
    Dernier message: 11/08/2005, 11h34
  4. problème our passer des string dans tableau d'int
    Par Battosaiii dans le forum C++
    Réponses: 9
    Dernier message: 15/07/2004, 17h42
  5. [VB.NET] XML - Trier des noeuds
    Par nako dans le forum VB.NET
    Réponses: 2
    Dernier message: 10/06/2004, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo