Forum Programmation.python filter request json avec un param

Posté par  . Licence CC By‑SA.
Étiquettes :
1
19
juil.
2018

Bonjour,

J'ai deux fonctions qui utilisent request comme module, mais qui chechent une "valeur differente".
Cela ressemble à ceci (elles sont tronquées)

def toto
        try:
            response = requests.get(url=url, headers=self.headers, verify=False)
            return response.json()["abcdef"][0]["@odata.id"]

def titi
        try:
            response = requests.get(url=url, headers=self.headers, verify=False)
            return response.json()["efgh"]["@odata.id"]

je voudrais fusionner les 2 fonctions qui font la même chose, modulo l'élément à rechercher.
je voudrais passer ["abcdef"][0]["@odata.id"] ou ["efgh"]["@odata.id"] en param de la fonction, mais je ne trouve pas la méthode pour l'appliquer ensuite.

Existe t'il un moyen de la faire svp ?
Merci.

  • # Pseudo-code

    Posté par  . Évalué à 2. Dernière modification le 19 juillet 2018 à 10:36.

    Hello,

    Une solution simple serait de passer en argument la liste des éléments à rechercher, et de retourner la valeur associée à cette liste.

    En pseudo-code, ça donnerait :

    fonction genericFunction(url, indexes):
      response = requests.get(url=url, headers=self.headers, verify=False)
      ret = response.json()
      pour(elt dans indexes):
        ret = ret[elt]
      retourner(ret)
    

    Matricule 23415

  • # Une fonction lambda

    Posté par  . Évalué à 2. Dernière modification le 20 juillet 2018 à 21:39.

    Ca ressemble un peut a ton code. je ne sais pas si c'est tres idiomatique par contre:

    def part_commune(l: lambda dict: dict):
        o =  {
            "abcdef": [{"@odata.id": "id1"}],
            "efgh": {"@odata.id": "id2"}
        }
        return l(o)
    
    def toto():
        return part_commune(lambda x: x["abcdef"][0]["@odata.id"])
    
    def titi():
        return part_commune(lambda x: x["efgh"]["@odata.id"])
    
    print(titi()) #id2
    print(toto()) #id1
    • [^] # Re: Une fonction lambda

      Posté par  . Évalué à 2.

      L'annotation de type sur la methode du haut est un peu foireuse appremment:

      def part_commune(lambda_fun):
          o =  {
              "abcdef": [{"@odata.id": "id1"}],
              "efgh": {"@odata.id": "id2"}
          }
          return lambda_fun(o)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.