Wende if-elseif-Anweisungen ins Wörterbuch

Ich habe den folgenden Code für einen RESTful Anruf zu einem Server:

def request(self, request, account_id, user): if request is 'get_id': #Get user from id result = requests.get(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers) elif request is 'get_username': #Get user from username result = requests.get(api_root + "/accounts/" + account_id + "/users?username=" + user, headers=self.headers) elif request is 'get_email': #Get user from username result = requests.get(api_root + "/accounts/" + account_id + "/users?email=" + user, headers=self.headers) elif request is 'post': #Add user to new account result = requests.post(api_root + '/accounts/' + account_id + '/users', data=json.dumps(user), headers=self.headers) elif request is 'delete': #Delete user from account result = requests.delete(api_root + "/accounts/" + account_id + "/users/" + user, headers=self.headers) #Throw exception if non-200 response result.raise_for_status() #Print request result / status print "\nRequest " + request + " Result: " + result.text + "\nStatus: " + str(result.status_code) return result 

Ich weiß, das ist hässlich und ich wollte es in ein Wörterbuch umwandeln, so etwas wie:

 def request(self, request, account_id, user): url = api_root + "/accounts/" + account_id function_dictionary = {} function_dictionary['get_id'] = requests.get(url + "/users/" + user, headers=self.headers) function_dictionary['get_username'] = requests.get(api_root + "/accounts/" + account_id + "/users?username=" + user, headers=self.headers) function_dictionary['get_email'] = requests.get(api_root + "/accounts/" + account_id + "/users?email=" + user, headers=self.headers) function_dictionary['delete'] = requests.delete(url + "/users/" + user, headers=self.headers) function_dictionary['post'] = requests.post(url + '/users', data=json.dumps(user), headers=self.headers) result = function_dictionary.get(request) #Throw exception if non-200 response result.raise_for_status() return result 

Ich habe immer noch das Gefühl, dass ich es falsch mache. Kann jemand mir sagen, was die richtige Methode zu nähern, wenn / elseif Aussagen in Python ist?

Vielen Dank!

  • Parallelisierung eines Wörterbuchverstehens
  • Zählen Sie eindeutige Werte pro eindeutige Schlüssel im Python-Wörterbuch
  • Sortieren eines Wörterbuchs von Tupeln in Python
  • Übersetzung von Wörterbuch der Wörterbücher in Python
  • Wie benutzt man ein Wörterbuch, das von einem Modul in das Hauptprogramm geladen wird, von einem anderen Modul, das danach geladen wird?
  • Python: extrahieren Liste der Daten in dict in numpy Array
  • Python: Wie füge ich ein Wörterbuch in eine sqlite Datenbank ein?
  • Mapping std :: Karte zu Python
  • One Solution collect form web for “Wende if-elseif-Anweisungen ins Wörterbuch”

    Mit einem dict zu ersetzen, if: elif: Loops ist sicherlich Pythonic, aber beachten Sie, dass in Ihrem Beispiel Sie fordern requests.get etc für jeden Fall, den Sie im Wörterbuch speichern, dh die Wörterbuchwerte sind die Ergebnisse dieser Anrufe.

    Eine Alternative wäre, die Funktion und die Argumente separat im Wörterbuch zu speichern:

     function_dict = {'get_id': (requests.get, # function (url + "/users/" + user,), # tuple of arguments {'headers': self.headers}), # dict of keyword args ...} 

    Jetzt können Sie verwenden

     func, args, kwargs = function_dict[request] result = func(*args, **kwargs) 

    Auch beachten Sie, dass das Vergleichen von Strings mit is eine schlechte Idee (obwohl es manchmal funktioniert ); Es ist besser zu verwenden == :

     if request == 'get_id': 
    Python ist die beste Programmiersprache der Welt.