2017-05-23 5 views
2

Ich arbeite an einem Python 2.7-Skript so dass gegeben eine URL mit einer bestimmten Anzahl von Schlüssel-Wert-Paaren (nicht feste Anzahl von ihnen), ruft diese Werte auf einer JSON-Struktur.Wie Schlüsselwertpaare aus URL mit Python abgerufen werden

Dies ist, was ich bisher getan haben:

from furl import furl 

url = "https://search/address?size=10&city=Madrid&offer_type=1&query=Gran%20v" 

f = furl(url) 
fields = ['size', 'city', 'offer_type', 'query'] 

l = [] 
l.append(f.args['size']) 
l.append(f.args['city']) 
l.append(f.args['offer_type']) 
l.append(f.args['query']) 

body = { 
     fields[0]: f.args[fields[0]], 
     fields[1]: f.args[fields[1]], 
     fields[2]: f.args[fields[2]], 
     fields[3]: f.args[fields[3]] 
    } 

für den Fall Dieser Code funktioniert, aber nur in dem ich weiß, dass es 4 sein Schlüssel-Wert-Paare, und die Namen der Paare. Ich weiß nicht, wie ich das Problem angehen soll, wenn zum Beispiel meine URL kürzer oder größer ist.

Mit diesem Befehl length = len(f.args) ich die Anzahl der Paare erhalten kann, aber keine Vorstellung davon, wie die Schlüsselnamen aus dem f.args Objekt zu extrahieren

Vielen Dank, Álvaro

+5

'list (f.args)' oder 'f.args.keys()'? Normalerweise gibt ein dict-ähnliches Objekt seine Schlüssel zurück, wenn Sie 'list()' darauf aufrufen. –

Antwort

2

ist das wonach Sie suchen?

from furl import furl 

url = "https://search/address?size=10&city=Madrid&offer_type=1&query=Gran%20v" 

f = furl(url) 

print zip(f.args.keys(),f.args.values()) 

Ausgang:

[('size', '10'), ('city', 'Madrid'), ('offer_type', '1'), ('query', 'Gran v')]

+0

OP will speziell ein Diktat. –

+0

Welp, ich denke nicht, habe +1 –

4

Ich bin etwas verwirrt ... f.args ist bereits ein Dictionary-ähnliches Objekt des gewünschten Typs. Wenn Sie es explizit in ein Wörterbuch konvertieren möchten, können Sie Folgendes verwenden:

body = dict(f.args) 

Aber auch das scheint unnötig. Wenn Sie eine neue Kopie des Objekts wünschen, damit Sie es ändern können, ohne die ursprüngliche Instanz zu beeinflussen, können Sie die Methode .copy() aufrufen.

+0

Am meisten brauchst du 'f.args.copy()'. Gut gesehen. –

1

Die furl Bibliothek ist nicht besonders gut dokumentiert, sondern durch den Quellcode Graben zeigt, dass f.args eine Eigenschaft ist, die schließlich zu einem orderedmultidict.omdict Objekt umleitet. Dies unterstützt alle Standard-Wörterbuch-Methoden, zusätzlich zu viel mehr interessante Sachen (auch nicht gut dokumentiert).

Sie können daher einfach f.args verwenden, wo immer Sie body benötigen. Wenn Sie aus irgendeinem Grund eine Kopie benötigen, tun Sie f.args.copy() oder möglicherweise dict(f.args).

Verwandte Themen