JSon convertierung

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Guten Tag,
habe mir vor ein paar Tagen ein Buch zum Thema Python und Kivy angeschafft. Als Beispiel wird ein Wetterapp entwickelt die, die API von dieser Seite benutzt: http://openweathermap.org/api
Alles schön und gut. Die suche nach einer Stadt soll laut Buch so aussehen:

Code: Alles auswählen

    def search_location(self):
        search_template = "http://api.openweathermap.org/data/2.5/" + "find?q={}&type=like"
        search_url = search_template.format(self.search_input.text) # search_input ist ein Text Input Field
        request = UrlRequest(search_url, self.found_location)
        
    def found_location(self, request, data):
        cities = ["{}({})".format(d.['name'], d.['sys']['country'])
                  for d in data['list']]
        print "\n".join(cities)
Nun ja jetzt habe ich zwei Probleme:
1.) Leider verstehe ich die Zeilen sieben und acht nicht wirklich und sie werden im Buch auch nicht weiter beschrieben außer "Konvertierung der Suchergebnisse".

2.) Wenn ich den Code ausführe kommt die Fehlermeldung:

Code: Alles auswählen

C:\Users\User\kivy>python main.py
  File "main.py", line 16
    cities = ["{}({})".format(d.['name'], d.['sys']['country'])
                                ^
SyntaxError: invalid syntax

Das ich den Fehler nicht selber lösen kann liegt sehr wahrscheinlich daran, dass ich mit der Zeile Code nicht anfangen kann. :)

Beispielseite der API: http://api.openweathermap.org/data/2.5/ ... &type=like
BlackJack

@audacity363: Die Punkte gehören da nicht hin. Also statt ``d.['schlüssel']`` muss es ``d['schlüssel']`` heissen.

Ansonsten ist das einfach eine „list comprehension”. Falls Dir das Syntax-Konstrukt noch nicht bekannt sein sollte.
audacity363
User
Beiträge: 83
Registriert: Dienstag 6. August 2013, 18:59

Okey danke War ja einfacher als gedacht. Nein der Begriff hat mir noch nichts gesagt, werde mich aber mal einlesen.
Schorlem
User
Beiträge: 40
Registriert: Dienstag 3. Juni 2014, 16:37

Man könnte die list comprehension auch so umschrieben, damit's einfacher zu verstehen ist:

Code: Alles auswählen

def found_location(self, request, data):
    cities = []
    for d in data['list']:
        cities.append("{}({})".format(d.['name'], d.['sys']['country'])
    print("\n".join(cities))
Wär das gleiche, nur unnötiger^^

Nur, um die Funktionsweise zu verdeutlichen ;)
Diese Nachricht wurde maschinell erstellt und ist daher ohne Unterschrift gültig.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und den Fehler hast du dringelassen, weils nicht zur Funktionsweise gehoert, ja? :twisted:
Antworten