2017-03-17 2 views
0

Ok .. Ich habe tatsächlich versucht, so schwer es herauszufinden, aber ich kann es einfach nicht herausfinden.Ich bekomme immer keyError: "Daten" Python

Ich versuche, auf eine JSON-Datei zuzugreifen und einige Sachen auszudrucken, die ich wollte.

Die URL ich Zugriff bin versucht, ist dies: https://www.reddit.com/user/clockwork8.json

Also hier ist der Deal

Ich habe jetzt:

import urllib, json, unicodedata 

username1 = raw_input('Username: ') 
url1 = "https://www.reddit.com/user/clockwork8" 
response = urllib.urlopen(url1) 
data = json.loads(response.read()) 

an der Spitze des Codes, und ich habe die folgenden zwei Optionen ausprobiert:

welche Dieser Fehler gibt mir:

for fordata in data["data"]["children"][number]: 
TypeError: list indices must be integers, not dict 

So habe ich versucht, dies:

for a in range(len(data['data']['children'])): 
    print data['data']['children'][a]['data']['score'].encode('ascii') 

und jetzt es gibt mir diese Fehlermeldung:

for a in range(len(data['data']['children'])): 
KeyError: 'data' 

Jede Idee, was das Problem ist ..?

+0

Welche Objekte in 'data' wollen Sie? Mit Ihrem Code bekomme ich '25' Ergebnisse – davedwards

+0

Vielleicht möchten Sie' print [d ['data'] ['score'] für d in Daten ['data'] ['children']] ''?Gibt 25 'scores': [3, 1, 2, 1, 0, 2, 1, 0, -3, 9, 1, 3, 2, 2, 4, 2, 1, 2, 16, -1, 58, 3, 1, 0, -18] – davedwards

Antwort

0

Sieht aus, als ob Sie alle Punkte von diesem json Objekt möchten.

Jedes Objekt in data['data']['children'] hat einen data Schlüssel, so dass wir data auf jedem ihnen anrufen müssen. Weiterhin auf jede dieser data zu bekommen ‚s 'score' Wert, müssen wir seine [data][score] nennen:

Mit einem for -loop wie Sie waren:

for d in data['data']['children']: 
    print d['data']['score'] 

jeden 'score' einen nach dem anderen gedruckt wird, oder Sie können alle 'scores' in einer Liste erhalten Pythons Liste Verständnis Syntax, die uns einen Einzeiler gibt:

scores = [d['data']['score'] for d in data['data']['children']] 

scores enthält jetzt eine Liste von 25 Werten:

[3, 1, 2, 1, 0, 2, 1, 0, -3, 9, 1, 3, 2, 2, 4, 2, 1, 2, 16, -1, 58, 3, 1, 0, -18] 

Hoffe, das hilft.

+0

ich weiß wirklich nicht, ob es ein Problem mit meinem Computer ist, aber Ich kopiere deinen Code GENAU dasselbe, wi Das Topbit meines Codes enthält Import und die URL, aber es gibt NOCH eine Fehlermeldung ... scores = [d ['data'] ['score'] für d in data ['data'] ['children']] KeyError: 'Daten' – chemo

+0

Oh, Entschuldigung, ja du hast recht ... du musst '.json' zu der URL hinzufügen:' url1 = "https://www.reddit.com/user/clockwork8.json "'; und verwende die 'json.load' Methode, nicht' lädt': 'data = json.load (Antwort)' – davedwards

+0

Ok Vielen Dank !! Könntest du bitte erklären, wie das Format deines Codes war? durchläuft man jede Instanz von ['data'] ['score'] in Daten ['data'] ['children']? – chemo