python: read json and loop dictionary
That seems generally fine.
There's no need to first read the file, then use loads. You can just use load directly.
output_json = json.load(open('/tmp/output.json'))
Using i and k isn't correct for this. They should generally be used only for an integer loop counter. In this case they're keys, so something more appropriate would be better. Perhaps rename i
as container
and k
as stream
? Something that communicate more information will be easier to read and maintain.
You can use output_json.iteritems()
to iterate over both the key and the value at the same time.
for majorkey, subdict in output_json.iteritems():
print majorkey
for subkey, value in subdict.iteritems():
print subkey, value
Note that, when using Python 3, you will need to use items() instead of iteritems(), as it has been renamed.
ZiTAL
Updated on November 05, 2020Comments
-
ZiTAL over 3 years
I'm learning python and i loop like this the json converted to dictionary: it works but is this the correct method? Thank you :)
import json output_file = open('output.json').read() output_json = json.loads(output_file) for i in output_json: print i for k in output_json[i]: print k, output_json[i][k] print output_json['webm']['audio'] print output_json['h264']['video'] print output_json['ogg']
here the JSON:
{ "webm":{ "video": "libvp8", "audio": "libvorbis" }, "h264": { "video": "libx264", "audio": "libfaac" }, "ogg": { "video": "libtheora", "audio": "libvorbis" } }
here output:
> h264 audio libfaac video libx264 ogg > audio libvorbis video libtheora webm > audio libvorbis video libvp8 libvorbis > libx264 {u'audio': u'libvorbis', > u'video': u'libtheora'}
-
Oiva Eskola almost 11 yearsI'm getting
AttributeError: 'list' object has no attribute 'iteritems'
-
chmullig almost 11 yearsThat suggests your JSON file doesn't contain a dictionary but instead a list. Perhaps it's a list of 1 dictionary? Try printing it out and seeing exactly what it contains.
-
Laurent Van Winckel about 6 years@OivaEskola the iteritems() method has been renamed to items() in Python 3, so that might be the issue.