2017-03-14 1 views
0
f = open("sample_flickr_response.json","r") 
search_result_diction = json.loads(f.read()) 
print search_result_diction 
f.close() 
search_result_diction["id"] 
for sample_photo_ids in sample_photo_ids["id"]: 
    print sample_photo_ids['raw'] 

Ich habe einige Probleme mit meinem oben genannten Code. Ich versuche, um die Datei zu öffnen und die Daten innerhalb dieser Datei in eine Variable laden genannt search_result_diction.The Variable search_result_diction enthält einen sehr komplexen Wörterbuch (siehe unten). Jeder Gegenstand hat eine ID. Ich versuche, eine Liste aller Ide von jedem Element zu erstellen, die die search_result_diction Daten darstellt, und in einer Variablen namens sample_photo_ids diese Liste speichern.Problem mit verschachtelten Daten in einem Wörterbuch

Der aktuelle Fehler Ich erhalte eine KeyError: ‚id‘.

unten ist das Wörterbuch für sample_flickr_response.json

{"photos": {"photo": [{"isfamily": 0, "title": "Most Torun\u0301ski w Koninie z mola na Bulwarze Nadwarcian\u0301skiego", "farm": 1, "ispublic": 1, "server": "695", "isfriend": 0, "secret": "94b1d76d0d", "owner": "[email protected]", "id": "33119881551"}, {"isfamily": 0, "title": "Bulwar Nadwarcian\u0301ski w Koninie z Mostu Torun\u0301skiego", "farm": 4, "ispublic": 1, "server": "3917", "isfriend": 0, "secret": "198da64c38", "owner": "[email protected]", "id": "32433652893"}, {"isfamily": 0, "title": "O Tejo \u00e9 mais belo que o rio que corre pela minha aldeia...", "farm": 1, "ispublic": 1, "server": "718", "isfriend": 0, "secret": "f41a26e2ec", "owner": "[email protected]", "id": "33091881772"}, {"isfamily": 0, "title": "", "farm": 4, "ispublic": 1, "server": "3683", "isfriend": 0, "secret": "fa6920ee5a", "owner": "[email protected]", "id": "33248116255"}, {"isfamily": 0, "title": "Junto al puente", "farm": 1, "ispublic": 1, "server": "678", "isfriend": 0, "secret": "a97299cca1", "owner": "[email protected]", "id": "32433478723"}, {"isfamily": 0, "title": "Morning Gold", "farm": 3, "ispublic": 1, "server": "2885", "isfriend": 0, "secret": "1d4f4c0eb5", "owner": "[email protected]", "id": "32433458873"}, {"isfamily": 0, "title": "Cullemu quassu ? (Corsica)", "farm": 4, "ispublic": 1, "server": "3748", "isfriend": 0, "secret": "02c36ebd92", "owner": "127818[email protected]", "id": "33248054025"}, {"isfamily": 0, "title": "Chain Bridge", "farm": 1, "ispublic": 1, "server": "620", "isfriend": 0, "secret": "ee28ba6eb0", "owner": "[email protected]", "id": "32865004100"}, {"isfamily": 0, "title": "The bridge was badly damaged by falling trees", "farm": 1, "ispublic": 1, "server": "729", "isfriend": 0, "secret": "03c342054c", "owner": "[email protected]", "id": "33206363876"}, {"isfamily": 0, "title": "The Shard", "farm": 1, "ispublic": 1, "server": "598", "isfriend": 0, "secret": "874a39097f", "owner": "[email protected]", "id": "33119518551"}, {"isfamily": 0, "title": "Thumbs up!", "farm": 4, "ispublic": 1, "server": "3724", "isfriend": 0, "secret": "deeb5a53af", "owner": "[email protected]", "id": "33119511671"}, {"isfamily": 0, "title": "Adroit contortioning got us through the maze of branches", "farm": 4, "ispublic": 1, "server": "3721", "isfriend": 0, "secret": "88077093b6", "owner": "[email protected]", "id": "33247891385"}, {"isfamily": 0, "title": "Ardeche Panorama", "farm": 4, "ispublic": 1, "server": "3791", "isfriend": 0, "secret": "f147aba45d", "owner": "[email protected]", "id": "33247881545"}, {"isfamily": 0, "title": "Ardeche mono", "farm": 4, "ispublic": 1, "server": "3718", "isfriend": 0, "secret": "8bbc69b3a2", "owner": "[email protected]", "id": "33206275196"}, {"isfamily": 0, "title": "Ezgi goes first", "farm": 1, "ispublic": 1, "server": "698", "isfriend": 0, "secret": "23c18529ff", "owner": "[email protected]", "id": "32864887490"}, {"isfamily": 0, "title": "More landslide debris to work our way through", "farm": 4, "ispublic": 1, "server": "3929", "isfriend": 0, "secret": "e0247dace2", "owner": "[email protected]", "id": "32864826730"}, {"isfamily": 0, "title": "A large boulder just missed the bench", "farm": 1, "ispublic": 1, "server": "730", "isfriend": 0, "secret": "179d67c529", "owner": "[email protected]", "id": "33119372751"}, {"isfamily": 0, "title": "P1030528", "farm": 4, "ispublic": 1, "server": "3761", "isfriend": 0, "secret": "f0a3f2980a", "owner": "[email protected]", "id": "32433136103"}, {"isfamily": 0, "title": "View up the Rogue River", "farm": 4, "ispublic": 1, "server": "3750", "isfriend": 0, "secret": "91d1e1ec60", "owner": "[email protected]", "id": "33091455582"}, {"isfamily": 0, "title": "Coming Together", "farm": 1, "ispublic": 1, "server": "582", "isfriend": 0, "secret": "b2b733c26e", "owner": "[email protected]", "id": "33206118806"}, {"isfamily": 0, "title": "Deja vu", "farm": 4, "ispublic": 1, "server": "3947", "isfriend": 0, "secret": "2499616ce3", "owner": "[email protected]", "id": "33206004366"}, {"isfamily": 0, "title": "Path to H\u00e4llings\u00e5fallet, Frostviken", "farm": 3, "ispublic": 1, "server": "2919", "isfriend": 0, "secret": "ca326bbe20", "owner": "[email protected]", "id": "33090793192"}, {"isfamily": 0, "title": "Clouds reflect on the lake", "farm": 3, "ispublic": 1, "server": "2938", "isfriend": 0, "secret": "b5bbf97fb8", "owner": "[email protected]", "id": "32433055673"}, {"isfamily": 0, "title": "Bend in the lake's arm", "farm": 4, "ispublic": 1, "server": "3770", "isfriend": 0, "secret": "45e305e7f3", "owner": "[email protected]", "id": "32864696620"}, {"isfamily": 0, "title": "Lane and Colby's turn", "farm": 1, "ispublic": 1, "server": "602", "isfriend": 0, "secret": "075d3de10c", "owner": "[email protected]", "id": "32864654800"}, {"isfamily": 0, "title": "OVIS CANADENSIS (Bighorn sheep), Muncho Lake, Alaska Highway", "farm": 4, "ispublic": 1, "server": "3693", "isfriend": 0, "secret": "8c70df07e1", "owner": "[email protected]", "id": "33206038456"}, {"isfamily": 0, "title": "Ezgi has a moment of concern", "farm": 4, "ispublic": 1, "server": "3677", "isfriend": 0, "secret": "11613de3b1", "owner": "[email protected]", "id": "33119196241"}, {"isfamily": 0, "title": "Ezgi works her way across the slide", "farm": 4, "ispublic": 1, "server": "3873", "isfriend": 0, "secret": "1a48335ee7", "owner": "[email protected]", "id": "32864564520"}, {"isfamily": 0, "title": "Experimental magic - Portage Creek at Central Park", "farm": 1, "ispublic": 1, "server": "638", "isfriend": 0, "secret": "b6b8328191", "owner": "[email protected]", "id": "33119149481"}, {"isfamily": 0, "title": "Striking color of the lake", "farm": 1, "ispublic": 1, "server": "631", "isfriend": 0, "secret": "e3db7becd1", "owner": "[email protected]", "id": "33091265332"}, {"isfamily": 0, "title": "Working our way through the landslide debris", "farm": 4, "ispublic": 1, "server": "3742", "isfriend": 0, "secret": "e7df4dc912", "owner": "[email protected]", "id": "32864486830"}, {"isfamily": 0, "title": "Cagliari notturna", "farm": 4, "ispublic": 1, "server": "3672", "isfriend": 0, "secret": "101ae4a45f", "owner": "[email protected]", "id": "33091220922"}, {"isfamily": 0, "title": "Second of Aber Falls", "farm": 3, "ispublic": 1, "server": "2876", "isfriend": 0, "secret": "b556f5001f", "owner": "[email protected]", "id": "32864453330"}, {"isfamily": 0, "title": "Uh oh, a landslide took out part of the trail", "farm": 1, "ispublic": 1, "server": "659", "isfriend": 0, "secret": "8b93f3b5eb", "owner": "[email protected]", "id": "32864448760"}, {"isfamily": 0, "title": "Cagliari notturna", "farm": 1, "ispublic": 1, "server": "745", "isfriend": 0, "secret": "d5288ee46b", "owner": "[email protected]", "id": "32403444924"}, {"isfamily": 0, "title": "Madrone and fir mix of forest", "farm": 1, "ispublic": 1, "server": "736", "isfriend": 0, "secret": "707e1fe4b6", "owner": "[email protected]", "id": "33205840676"}, {"isfamily": 0, "title": "Snowy hill on the other side of the lake", "farm": 1, "ispublic": 1, "server": "706", "isfriend": 0, "secret": "fc98901f1e", "owner": "[email protected]", "id": "33205798806"}, {"isfamily": 0, "title": "Vista notturna dal Bastione di Santa Croce", "farm": 1, "ispublic": 1, "server": "628", "isfriend": 0, "secret": "2efa6819c5", "owner": "[email protected]", "id": "32864374470"}, {"isfamily": 0, "title": "Train", "farm": 4, "ispublic": 1, "server": "3690", "isfriend": 0, "secret": "1ce9f1e68b", "owner": "[email protected]", "id": "32403385944"}, {"isfamily": 0, "title": "2017_03_04_Umea__1200478_exported_edited", "farm": 1, "ispublic": 1, "server": "693", "isfriend": 0, "secret": "6c1d85d6dc", "owner": "[email protected]", "id": "33118917081"}, {"isfamily": 0, "title": "Stagno del Perdalonga e Cagliari sullo sfondo", "farm": 3, "ispublic": 1, "server": "2872", "isfriend": 0, "secret": "e9c45d55a5", "owner": "[email protected]", "id": "32432673893"}, {"isfamily": 0, "title": "Archeologia industriale a Cagliari", "farm": 4, "ispublic": 1, "server": "3869", "isfriend": 0, "secret": "3545ca5d5b", "owner": "[email protected]", "id": "32403223804"}, {"isfamily": 0, "title": "Icicles decorated a mossy overhang", "farm": 1, "ispublic": 1, "server": "671", "isfriend": 0, "secret": "817bd8ed78", "owner": "[email protected]", "id": "33091111222"}, {"isfamily": 0, "title": "Despite the sunny day, it still was cold", "farm": 1, "ispublic": 1, "server": "659", "isfriend": 0, "secret": "58f8fd13d7", "owner": "[email protected]", "id": "32864329110"}, {"isfamily": 0, "title": "Trail, on a beautiful day", "farm": 3, "ispublic": 1, "server": "2911", "isfriend": 0, "secret": "2c270e78fe", "owner": "[email protected]", "id": "32432701533"}, {"isfamily": 0, "title": "Spectacular rock next to the trail", "farm": 3, "ispublic": 1, "server": "2898", "isfriend": 0, "secret": "cf6d010aed", "owner": "[email protected]", "id": "33090998982"}, {"isfamily": 0, "title": "Rio Trovoadinha", "farm": 4, "ispublic": 1, "server": "3829", "isfriend": 0, "secret": "e6925ef5d9", "owner": "[email protected]", "id": "33118765501"}, {"isfamily": 0, "title": "Colorful reflections", "farm": 4, "ispublic": 1, "server": "3708", "isfriend": 0, "secret": "21337df2fd", "owner": "[email protected]", "id": "32432576213"}, {"isfamily": 0, "title": "Gullfoss - Iceland", "farm": 1, "ispublic": 1, "server": "666", "isfriend": 0, "secret": "2ee20a355b", "owner": "[email protected]", "id": "32432544963"}, {"isfamily": 0, "title": "River Colne Staines-upon-Thames", "farm": 4, "ispublic": 1, "server": "3769", "isfriend": 0, "secret": "b988153d59", "owner": "[email protected]", "id": "33205558876"}], "pages": 5051, "total": "252517", "page": 1, "perpage": 50}, "stat": "ok"} 
+0

Dies gilt nicht Python-Code ist. 'für aufgerufene sample_photo_ids in sample_photo_ids [" id "]:' und 'print sample_photo_ids ['raw']' würde zu Syntaxfehlern führen. – Morgoth

+1

'ids = [item [ "id"] für Artikel in sample_flickr_response [ "Fotos"] [ "Foto"]]'. Kopieren/Einfügen in http://jsonlint.com/ und validieren, um Ihnen eine Vorstellung von der Struktur zu geben, da sie das Lesen erleichtert. – roganjosh

Antwort

1

Borrowing von @roganjosh's comment, ein idiomatischen Weg, um die id s zu erhalten:

ids = [item["id"] for item in search_result_diction["photos"]["photo"]] 

Ihnen ein list von id s geben, die Sie drucken können dann:

for id in ids: 
    print id 

Ausgang:

33119881551 
32433652893 
33091881772 
... 

In einem for -loop näher an, was Sie in der Frage verwenden, dies wird Ihnen auch das gleiche geben:

for item in search_result_diction["photos"]["photo"]: 
    print item["id"] 
+0

Warum verwenden Sie 'Bereich (len (etwas))'? Würde nicht mein Kommentar von 'ids = [item [" id "] für Artikel in sample_flickr_response [" Fotos "] [" Foto "]] dasselbe erreichen? Ich denke, es ist idiomatischer. – roganjosh

+0

@roganjosh Ich habe versucht, was Sie in den Kommentar geschrieben und bekam 'NameError: Name 'sample_flickr_response' ist nicht definiert 'so nahm ich an *** *** *** etwas falsch gemacht. Das zu ändern, das war das erste, was funktionierte, also postete ich es naiv als Antwort. Sie haben recht, wenn Sie das ändern, um OPs "search_result_diction" zu verwenden, funktioniert das tatsächlich und ist idiomatischer. – davedwards

+0

@roganjosh Vielleicht ist es am besten, meine Antwort zu löschen und Ihren Kommentar als Zusammenfassung zu hinterlassen? – davedwards

Verwandte Themen