2017-09-10 2 views
1

Ich habe ein Problem mit der Eingabe von JSON-Stil Python-Code in ein Wörterbuch konvertieren. Ich verwende eine Ziehort-Daten von Google und erhalte alle Daten, die ich brauche. Jedes Mal, wenn ich ein Wörterbuch aus der Liste der Daten erstelle, fehlen jedoch einige der Schlüssel: Wert-Paare.Erstellt ein Wörterbuch, aber einige der Schlüsselwertpaare scheinen zu fehlen oder nicht zu übertragen

Hier ist der Json-Stil Python-Code, den ich zurück bekomme.

{ 
    'html_attributions': [], 
    'next_page_token': 'CpQCBgEAAFzW9_qpkvmXV8sFiwXg6dEp2jsZXEqQOO4upW1U0FZPK0kiJvSmEbx4EuhAtDD4vtJcC4duqCj6oo0P68cRkGArenzZQWr61Wne0vA44R16SrfCDWLxQjqUu8zUcdLvdB7HfOHPMd7-KWK4cmX-6bLYIJldmnJBeqhnR5xmtB_TGlMyGlzh4vZ4kOB8dc1bnD6ijWxfFyz8wJ1ugA_5hZHLXtCY6NkE8TVYgTTV9710puKlKgiVSSkjwV3IsGgEhzixzGRrVHg2dB3Ehv2KHRuXnvIQJHr-CIkUoK79vI-45pyitdYlW1h9UQk_fzDsIeec3PNE5Qz6kN--NcDv-_jzFBr7QS2RGLkAcZX4aFdfEhCoP3MAVgjsl_tKdYaIX8y_GhSvCFZSxLfWVDAyF--7T6l32G0YFw', 
    'results': [{ 
    'formatted_address': '2222 McKinney Ave, Dallas, TX 75201, United States', 
    'geometry': { 
     'location': { 
     'lat': 32.7935, 
     'lng': -96.8021119 
     }, 
     'viewport': { 
     'northeast': { 
      'lat': 32.7948813802915, 
      'lng': -96.8009040197085 
     }, 
     'southwest': { 
      'lat': 32.7921834197085, 
      'lng': -96.8036019802915 
     } 
     } 
    }, 
    'icon': 'https://maps.gstatic.com/mapfiles/place_api/icons/restaurant-71.png', 
    'id': '26ba45975d09c8889ea321078b6bf10ceff07359', 
    'name': 'Smashburger', 
    'opening_hours': { 
     'open_now': True, 
     'weekday_text': [] 
    }, 
    'photos': [{ 
     'height': 3024, 
     'html_attributions': ['<a href="https://maps.google.com/maps/contrib/107709113475800121508/photos">Terry Wint Jr</a>'], 
     'photo_reference': 'CmRaAAAA9BPb8sP5KUp9bLAgSd9dPQzH15TkG3sw5T6qOa-WSV1hi-3DLIhVzWI5woD2GtSl3aktKXTXktLUfr9vpum-XywbqFMKunee-YhWwPtwOGJaO5lULU-g1px7Z6lPUFvqEhDrofF3_89I455YRKo2hZuFGhRilVDqXdt5x2jPieN3W07UvJwsvA', 
     'width': 4032 
    }], 
    'place_id': 'ChIJ22Ci9y-ZToYRDw1hkXkjceY', 
    'price_level': 1, 
    'rating': 4.1, 
    'reference': 'CmRSAAAAzQIvy0nuhTQpRoAFTlilcVY_BfqGFj7gNlpNeIecwOWGV1x0qFm80zkPYFYKtJ15ilHYSoQbDH2wsQ_vahw5ilhriHA0EBWavcyev4mYVgNWssL0neY5d7YwOLAgtSEvEhBN6e_DakrfQPVtqkagEtQ4GhRCdi5cZ6CKfk6AqXkuGJ9ZVpuR-A', 
    'types': ['restaurant', 'food', 'point_of_interest', 'establishment'] 
    } 

Wie in einem anderen thread'price_level' mich darauf hingewiesen außerhalb der 'results' Liste. Wenn ich jedoch 'geocode_result.keys()' anrufe, bekomme ich nur 'html_attributes', 'next_page_token', 'results', 'status'.

Hier ist der Code, den ich ausführe.

results = [] 

# def get_data(): 
for term, (latitude, longitude, search_radius) in search_parameters.items(): 
    params = { 
     'query': term, 
     'location': (latitude, longitude), 
     'radius': search_radius 
    } 
    geocode_result = gmaps.places(**params) 
    for i in geocode_result['results']: 

     results.append(i['name']) 
     results.append(i['geometry']['location']['lat']) 
     results.append(i['geometry']['location']['lng']) 
     results.append(i['formatted_address']) 
     results.append(i['opening_hours']['open_now']) 
     results.append(i['price_level']) 
     results.append(i['rating']) 
     results.append(i['types']) 

    if 'next_page_token' in geocode_result.keys(): 
     while 'next_page_token' in geocode_result.keys(): 
      time.sleep(2.5) 
      params.update({'page_token': geocode_result['next_page_token']}) 
      geocode_result = gmaps.places(**params) 
      for i in geocode_result['results']: 
       results.append(i['name']) 
       results.append(i['geometry']['location']['lat']) 
       results.append(i['geometry']['location']['lng']) 
       results.append(i['formatted_address']) 
       results.append(i['opening_hours']['open_now']) 
       results.append(i['price_level']) 
       results.append(i['rating']) 
       results.append(i['types']) 
    else: 
     break 

print(results) 

Ich möchte in der Lage sein, die 'lat', 'lng', 'name', 'open_now', 'price_level', 'rating', 'types' ziehen. Ich kann alle außer den letzten drei anrufen, weil sie nicht als Schlüsselwertpaare in 'geocode_result' gespeichert werden. Jede Hilfe oder Beratung wird geschätzt!

+0

Ich kann das nicht reproduzieren, plus 'geocode_result' ist eine Liste, also weiß ich nicht, wie Sie darüber iterieren, wie es ein Wörterbuch ist. –

+0

Entschuldigung, ich habe es versehentlich von einer früheren Version kopiert, ich werde es jetzt bearbeiten. –

+0

Ich kann es immer noch nicht reproduzieren. Ich zurück '[ 'Smashburger', 32,7935, -96,8021119, '2222 McKinney Ave, Dallas, TX 75201, USA', Zwar 1, 4.1, [ 'Restaurant', 'Lebensmittel', "point_of_interest", "Establishment"]] ist das nicht was du willst? –

Antwort

0

"Ja, aber Sie suchen in geocode_result [ 'Ergebnisse'], so dass Sie sollten für i in geocode_result bei der Suche werden [ 'Ergebnisse']: print i.keys()" - @aws_apprentice

Aber es stellt sich Aus dem Grund, dass ich einen Fehler erhalten habe, war, dass nicht alle Ergebnisse einen 'price_level' hatten, also werde ich eine try-Anweisung verwenden, um dieses Problem zu vermeiden.

Verwandte Themen