python: read json and loop dictionary

78,849

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.

Share:
78,849
ZiTAL
Author by

ZiTAL

Updated on November 05, 2020

Comments

  • ZiTAL
    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
    Oiva Eskola almost 11 years
    I'm getting AttributeError: 'list' object has no attribute 'iteritems'
  • chmullig
    chmullig almost 11 years
    That 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
    Laurent Van Winckel about 6 years
    @OivaEskola the iteritems() method has been renamed to items() in Python 3, so that might be the issue.