Partage
  • Partager sur Facebook
  • Partager sur Twitter

La méthode itemgetter()

Sujet résolu
Anonyme
    25 juillet 2010 à 12:10:33

    Bonjour,

    Actuellement je m'entraîne à travailler avec le module itertools et sa méthode groupby.

    Beaucoup d'exemple montre son utilité avec la méthode itemgetter() du module operator.

    Un exemple d'utilisation d'itemgetter()

    >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
    >>> sorted(data, key=itemgetter(0))
    [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]


    Un exemple donnant le même résultat

    >>> data = [('red', 1), ('blue', 1), ('red', 2), ('blue', 2)]
    >>> sorted(data)
    [('blue', 1), ('blue', 2), ('red', 1), ('red', 2)]


    A quoi sert ce itemgetter(), car sans cette méthode, je trouve le même résultat


    Je pense avoir compris ! On tri selon la donnée clé, dans notre cas, la clé est soit la couleur, soit un entier.


    Mon info est-elle correcte?
    • Partager sur Facebook
    • Partager sur Twitter
      25 juillet 2010 à 12:25:05

      itemgetter(item, ...) --> itemgetter object

      Return a callable object that fetches the given item(s) from its operand.
      After, f=itemgetter(2), the call f(r) returns r[2].
      After, g=itemgetter(2,5,3), the call g(r) returns (r[2], r[5], r[3])
      • Partager sur Facebook
      • Partager sur Twitter
      Anonyme
        25 juillet 2010 à 12:28:11

        Ouais et en français ça donne quoi?

        Un exemple?

        Apparemment c'est bien une clé, mais bon tu donnes pas beaucoup d'explications, car t'inquiète pas je l'ai lu mon help et ma doc :)

        • Partager sur Facebook
        • Partager sur Twitter
          25 juillet 2010 à 12:43:06

          a = [0,10,20,30,40,50,60,80,90]
          ig = operator.itemgetter(0,1,4,6,7) # crée une 'fonction' qui renverra les éléments d'index 0,1,4,6,7 sous forme de tuple
          print(ig(a)) # appel sur la liste a
          (0, 10, 40, 60, 70) # obtention (sous forme de tuple) des éléments d'index 0,1,4,6,7
          

          Pour moi la doc est (pour une fois) très clair !
          itemgetter() renvoie une 'fonction' qui prend en argument une séquence et qui renvoie les éléments de la séquence ayant pour index les arguments de itemgetter().

          Edit : Dans ton exemple ça indique que la clé par rapport à laquelle il faut trier est la clé 0 des tuples, la clé par défaut, si tu mets 1 à la place de 0 tu auras un résultat différent !
          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            25 juillet 2010 à 12:46:19

            Ok merci j'ai bien compris

            :)
            • Partager sur Facebook
            • Partager sur Twitter
              25 juillet 2010 à 12:50:33

              Vu que je découvre un peu aussi j'ai fait des test et là où ca devient intéressant c'est sur une liste de tuple à 3 élément en fait :
              a = [('red', 1, 'ford'), ('blue', 1, 'peugeot'), ('red', 2, 'renaud'), ('blue', 2, 'ferrari')]
              sorted(a,key=operator.itemgetter(1)) # tri uniquement par rapport à 
              # l'élément d'index 1 des tuples
              [('red', 1, 'ford'), ('blue', 1, 'peugeot'), ('red', 2, 'renaud'), ('blue', 2, 'ferrari')]
              sorted(a,key=operator.itemgetter(0,1)) # tri par rapport à 
              # l'élément 0 et 1, on tri d'abord par rapport à l'élément 0 puis 
              # par rapport à l'élement 1
              [('blue', 1, 'peugeot'), ('blue', 2, 'ferrari'), ('red', 1, 'ford'), ('red', 2, 'renaud')]
              sorted(a,key=operator.itemgetter(1,0)) # pareil qu'au dessus sauf que c'est
              # l'élémebt 1 que l'on trie en premier
              [('blue', 1, 'peugeot'), ('red', 1, 'ford'), ('blue', 2, 'ferrari'), ('red', 2, 'renaud')]
              
              • Partager sur Facebook
              • Partager sur Twitter
              Anonyme
                25 juillet 2010 à 12:52:02

                En effet je trouve que cette méthode itemgetter() liée avec une fonction de tri m'a l'air très efficace.

                • Partager sur Facebook
                • Partager sur Twitter

                La méthode itemgetter()

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown