2016-07-11 7 views
0

Ich versuche, Daten von einer Webseite abzurufen (http://python-data.dr-chuck.net/comments_295023.json), analysieren Sie es in Python mit JSON, und führen Sie einige Operationen darauf aus. Ich bin jedoch in eine Straßensperre geraten.For-Schleife nicht durch alle Werte eines Wörterbuchs

Dies ist mein Code:

import urllib 
import json 

address = raw_input('Enter location: ') 
if len(address) < 1 : 
    url = "http://python-data.dr-chuck.net/comments_295023.json" 
print 'Retrieving', url 
url_open = urllib.urlopen(url) 
data_str = url_open.read() 
print 'Retrieved', len(data_str), 'characters' 

info = json.loads(data_str) 
#print info 
for item in info: 
    print item 

Dies ist die Ausgabe ich aus dem Code erhalten:

Enter location: 
Retrieved 2744 characters 
note 
comments 

Die url_read zu funktionieren scheint, wenn ich es früher im Programm drucken. So auch der json.loads() Teil; Das Wörterbuch, das es mir gibt, enthält alle Werte von der Webseite.

import urllib 
import json 

address = raw_input('Enter location: ') 
if len(address) < 1 : 
    url = "http://python-data.dr-chuck.net/comments_295023.json" 
print 'Retrieving', url 
url_open = urllib.urlopen(url) 
data_str = url_open.read() 
print 'Retrieved', len(data_str), 'characters' 

info = json.loads(data_str) 
print info 

gibt mir die Ausgabe:

Enter location: 
Retrieved 2744 characters 
{u'note': u'This file contains the actual data for your assignment', u'comments': [{u'count': 98, u'name': u'Maxim'}, {u'count': 98, u'name': u'Amelia'}, {u'count': 90, u'name': u'Sandra'}, {u'count': 89, u'name': u'Betane'}, {u'count': 89, u'name': u'Sanaa'}, {u'count': 88, u'name': u'Nerisse'}, {u'count': 88, u'name': u'Kaisha'}, {u'count': 86, u'name': u'Kelum'}, {u'count': 80, u'name': u'Pardeepraj'}, {u'count': 80, u'name': u'Meri'}, {u'count': 80, u'name': u'Garry'}, {u'count': 78, u'name': u'Beth'}, {u'count': 76, u'name': u'Pamindar'}, {u'count': 74, u'name': u'Jace'}, {u'count': 71, u'name': u'Arman'}, {u'count': 71, u'name': u'Scout'}, {u'count': 65, u'name': u'Atiya'}, {u'count': 65, u'name': u'Alani'}, {u'count': 65, u'name': u'Sajjad'}, {u'count': 64, u'name': u'Jedidiah'}, {u'count': 63, u'name': u'Patryk'}, {u'count': 61, u'name': u'Alyshia'}, {u'count': 60, u'name': u'Michaela'}, {u'count': 58, u'name': u'Rowanna'}, {u'count': 54, u'name': u'Anabelle'}, {u'count': 52, u'name': u'Corah'}, {u'count': 49, u'name': u'Ninon'}, {u'count': 45, u'name': u'Kristal'}, {u'count': 37, u'name': u'Kerryanne'}, {u'count': 35, u'name': u'Saarah'}, {u'count': 35, u'name': u'Diego'}, {u'count': 31, u'name': u'Damaris'}, {u'count': 30, u'name': u'Ryleigh'}, {u'count': 26, u'name': u'Kaley'}, {u'count': 22, u'name': u'Maariyah'}, {u'count': 22, u'name': u'Cheyenne'}, {u'count': 21, u'name': u'Jazmine'}, {u'count': 19, u'name': u'Shaarvin'}, {u'count': 19, u'name': u'Loulou'}, {u'count': 19, u'name': u'Oluwafemi'}, {u'count': 19, u'name': u'Samanthalee'}, {u'count': 17, u'name': u'Ege'}, {u'count': 13, u'name': u'Clarke'}, {u'count': 8, u'name': u'Hubert'}, {u'count': 7, u'name': u'Scarlet'}, {u'count': 7, u'name': u'Kellen'}, {u'count': 4, u'name': u'Roark'}, {u'count': 3, u'name': u'Kinsey'}, {u'count': 3, u'name': u'Tansy'}, {u'count': 1, u'name': u'Aymal'}]} 

, die offensichtlich alle notwendigen Daten enthält.

Ich habe keine Ahnung, warum die For-Schleife mir die Ausgabe gibt, die ich bekam. Jede Hilfe wäre willkommen!

+0

Ihr erstes Beispiel ** funktioniert **. Sie haben ein * Wörterbuch * aus einer JSON-Nutzlast geladen, und die Iteration gab Ihnen die Schlüssel. Verwenden Sie 'info ['comments']' oder 'info ['note']', um die Werte zu lesen. –

+0

Es hat funktioniert! Vielen Dank! – thevioletsaber

Antwort

0

Es liegt daran, dass die meisten Ihrer Daten im Schlüssel "Kommentare" sind. Versuchen Sie, diese

for item in info: 
    print item 
    if item == 'comments': 
     for x in info['comments']: 
      print x['count'] 
      print x['name'] 
1

Ihr erstes Beispiel ganz gut gearbeitet. Sie durchlaufen ein Wörterbuch, eins mit zwei Schlüsseln, 'note' und 'comments'. Die Iteration liefert diese Schlüssel, und Sie haben sie gedruckt.

nur Zugang entweder Schlüssel:

print info['comments'] 
print info['note'] 

oder Schleife über info.items() sowohl Schlüssel und Wert in jeder Iteration zu erhalten.

Der 'comments' Wert ist eine Liste der Wörterbücher, die jeweils mit einem 'count' und 'name' Schlüssel:

for comment in info['comments']: 
    print comment['name'], comment['count'] 
0

Als ich sah in Ihnen, Ihre Daten verknüpfen ist ein dict von Listen von dicts struct. Verwenden Sie

for key, item in info.iteritems() 

Dies liefert die Ausgabe, die Sie benötigen. Beachten Sie, dass Sie für die inneren Diktate eine andere Schleife benötigen.

Verwandte Themen