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 :

Supprimer les \n / \t d'un dictionnaire


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut Supprimer les \n / \t d'un dictionnaire
    Bonsoir;

    je manipule un dictionnaire bourré de retour chariot / retour à la ligne, et j'aurai voulu savoir s'il y avait une astuce pour les supprimer, car je ne peux pas effectuer de replace (réservé aux listes) ni de rstrip (réservé aux chaînes de caractères). Ai-je oublié une astuce ?


    Merci à vous

  2. #2
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 798
    Points : 7 066
    Points
    7 066
    Par défaut
    On pourrait voir un exemple pour qu'on puisse travailler dessus?
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Bien-sur, voici un morceau de mon dictionnaire


    {'UL41\n': '50734', 'UL7\n': '86583'}
    j'aimerai donc supprimer les \n relatifs à chacune de me clés

  4. #4
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 798
    Points : 7 066
    Points
    7 066
    Par défaut
    Ma solution

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dic = {'UL41\n': '50734', 'UL7\n': '86583'}
    dic = {key.strip('\n'):value for key, value in dic.items()}
    print(dic)
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Merci pour votre solution c'est très efficace, je ne savais pas que l'on pouvait appliquer la méthode rstrip sur les keys.


    Bonne soirée

  6. #6
    Expert éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 798
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 798
    Points : 7 066
    Points
    7 066
    Par défaut
    Eh si

    Merci
    De rien

    Bonne soirée
    Toi aussi
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Je me permet de poser une question bête, j'aurai voulu savoir à partir de quelle version de Python les listes de compréhensions étaient 'elles gérées ? Car au bureau j'ai la version 2.6.5 et la synthaxe n'a pas l'air de lui convenir, alors que chez moi (version 2.7 + de mémoire) ça fonctionne.

    J'ai adapté le code du coup :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    for key,value in dicogene.items():
    	dicogene = {key.strip('\n'):value}

  8. #8
    Membre chevronné

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Points : 1 752
    Points
    1 752
    Par défaut
    Bpnjour,
    si je ne dis pas de bêtise la réponse à ta question est dans ta question. Attention à ne pas tomber dans une lecture récursive qui te ferait mourir de faim...

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    Bpnjour,
    si je ne dis pas de bêtise la réponse à ta question est dans ta question. Attention à ne pas tomber dans une lecture récursive qui te ferait mourir de faim...
    Oui en effet en me relisant je m'aperçois que je réponds moi même à ma question
    Si jamais vous connaissez une méthode plus éfficace je suis preneur

  10. #10
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Petite précision, si les comprehensions de dico, tuple et set sont apparue en py3k/py2.7, les list comprehensions sont bien plus anciennes (je crois bien les avoir toujours connues, donc je dirais 2.4 au moins*?).

    Et pour ton code, RTK45, celui-là ne va pas faire l’affaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for key, value in dicogene.items():
        dicogen[key.strip('\n')] = value
        del dicogen[key]  # Autant faire le menage, tant qu'a faire.

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2012
    Messages
    96
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2012
    Messages : 96
    Points : 72
    Points
    72
    Par défaut
    En effet même si mon code fonctionnait c'était très bancale, merci pour votre solution et votre précision mont29 ça répond parfaitement à mes besoins !

    Bonne journée

  12. #12
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Citation Envoyé par mont29 Voir le message
    Et pour ton code, RTK45, celui-là ne va pas faire l’affaire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for key, value in dicogene.items():
        dicogen[key.strip('\n')] = value
        del dicogen[key]  # Autant faire le menage, tant qu'a faire.
    ?
    C'est voulu ou nous avons deux objets dico différents (dicogene/dicogen) ?

    Dans le cas contraire est il indispensable de vous rappeler que c'est une mauvaise idée de changer la taille d'un objet durant son itération ?
    Merci d'utiliser le forum pour les questions techniques.

  13. #13
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Solutions Python 2/3:

    Avec un nouveau dico
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dic = {'UL41\n': '50734', 'UL7\n': '86583'}
    newdic = dict([(k.strip('\n'), v) for k, v in dic.items()])
    print(newdic)
    newdic1 = dict([(k.strip('\n'), dic[k]) for k in dic])
    print(newdic1)
    Et, à la limite, avec une itération sur le même dico:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for k in dic:
        dic[k.strip('\n')] = dic.pop(k)
    print(dic)
    Merci d'utiliser le forum pour les questions techniques.

  14. #14
    Membre éprouvé

    Homme Profil pro
    Diverses et multiples
    Inscrit en
    Mai 2008
    Messages
    662
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Diverses et multiples

    Informations forums :
    Inscription : Mai 2008
    Messages : 662
    Points : 1 273
    Points
    1 273
    Par défaut
    Ah oui, en effet… Avais pas pensé au constructeur à partir d’une liste.

    Et non, dicogen/dicogene n’était pas voulu*!

  15. #15
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Oubliez le dernier exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    >>> dic = {}
    >>> for i in range(5):
    ...     dic[str(i)+'\n'] = i
    ... 
    >>> dic
    {'0\n': 0, '3\n': 3, '1\n': 1, '4\n': 4, '2\n': 2}
    >>> for k in dic:
    ...     dic[k.strip('\n')] = dic.pop(k)
    ...     print(dic)
    ... 
    {'0': 0, '3\n': 3, '4\n': 4, '1\n': 1, '2\n': 2}
    {'0': 0, '3\n': 3, '4\n': 4, '1\n': 1, '2\n': 2}
    {'0': 0, '3': 3, '4\n': 4, '1\n': 1, '2\n': 2}
    {'0': 0, '3': 3, '4\n': 4, '1\n': 1, '2\n': 2}
    {'0': 0, '3': 3, '4': 4, '1\n': 1, '2\n': 2}
    {'0': 0, '3': 3, '4': 4, '1\n': 1, '2\n': 2}
    {'0': 0, '1': 1, '3': 3, '4': 4, '2\n': 2}
    {'0': 0, '1': 1, '3': 3, '2': 2, '4': 4}
    >>> dic = {}
    >>> for i in range(5):
    ...     dic[str(i)+'a'] = i
    ... 
    >>> dic
    {'1a': 1, '3a': 3, '0a': 0, '2a': 2, '4a': 4}
    >>> for k in dic:
    ...     dic[k+"b"] = dic.pop(k)
    ...     print(dic)
    ... 
    {'0a': 0, '2a': 2, '1ab': 1, '3a': 3, '4a': 4}
    {'0ab': 0, '2a': 2, '1ab': 1, '3a': 3, '4a': 4}
    {'2ab': 2, '0ab': 0, '1ab': 1, '3a': 3, '4a': 4}
    {'2ab': 2, '0ab': 0, '3a': 3, '1abb': 1, '4a': 4}
    {'2ab': 2, '3ab': 3, '0ab': 0, '1abb': 1, '4a': 4}
    {'2ab': 2, '3ab': 3, '0ab': 0, '1abbb': 1, '4a': 4}
    {'2ab': 2, '3ab': 3, '0ab': 0, '4ab': 4, '1abbb': 1}
    >>> dic = {'UL41\n': '50734', 'UL7\n': '86583'}
    >>> for k in dic:
    ...     dic[k.strip('\n')] = dic.pop(k)
    ...     print(dic)
    ... 
    {'UL41\n': '50734', 'UL7': '86583'}
    {'UL41': '50734', 'UL7': '86583'}
    {'UL41': '50734', 'UL7': '86583'}
    1) cela ne fonctionne que dans le cas de méthodes comme .strip()
    2) Il y a plus d'itérations que voulues.
    Merci d'utiliser le forum pour les questions techniques.

  16. #16
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 273
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 273
    Points : 36 757
    Points
    36 757
    Par défaut
    Salut,

    Juste pour signaler qu'il pourrait être judicieux de filtrer les '\n' à la construction du dico plutôt qu'après.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  17. #17
    Expert confirmé Avatar de PauseKawa
    Homme Profil pro
    Technicien Help Desk, maintenance, réseau, système et +
    Inscrit en
    Juin 2006
    Messages
    2 725
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Technicien Help Desk, maintenance, réseau, système et +
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 725
    Points : 4 005
    Points
    4 005
    Par défaut
    Difficile de relancer le sujet après une évidence...
    Un petit ovni (inutile donc) pour le weekend:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [dic.__setitem__(k.strip('\n'), dic.pop(k)) for k in sorted(dic)]
    Ok: création de deux listes et perte de temps. Mais bon, cela passe à la trappe.
    Merci d'utiliser le forum pour les questions techniques.

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

Discussions similaires

  1. Comment supprimer les doublons
    Par djelloulc dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 17/09/2013, 14h30
  2. Réponses: 9
    Dernier message: 06/11/2007, 12h36
  3. Réponses: 4
    Dernier message: 10/08/2004, 11h59
  4. [Jsp] Supprimer les caractère spéciaux d'une chaine
    Par PeteMitchell dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 13/05/2004, 11h11
  5. [String] Comment supprimer les accents
    Par iuz dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 08/03/2004, 02h58

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