python:读取json和循环字典

ZiT*_*TAL 16 python json dictionary loops

我正在学习python,我像这样循环json转换为字典:它工作,但这是正确的方法吗?谢谢 :)

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']
Run Code Online (Sandbox Code Playgroud)

这里是JSON:

{   
 "webm":{
    "video": "libvp8",
    "audio": "libvorbis"   
 },   
  "h264":   {
    "video": "libx264",
    "audio": "libfaac"   
 },   
  "ogg":   {
    "video": "libtheora",
    "audio": "libvorbis"   
 }
}
Run Code Online (Sandbox Code Playgroud)

这里输出:

> 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'}
Run Code Online (Sandbox Code Playgroud)

chm*_*lig 33

这似乎很好.

没有必要先读取文件,然后使用加载.您可以直接使用负载.

output_json = json.load(open('/tmp/output.json'))
Run Code Online (Sandbox Code Playgroud)

使用i和k对此不正确.它们通常只应用于整数循环计数器.在这种情况下,它们是关键,所以更合适的东西会更好.也许重命名icontainerk作为stream?传达更多信息的东西将更容易阅读和维护.

您可以使用output_json.iteritems()同时迭代键和值.

for majorkey, subdict in output_json.iteritems():
    print majorkey
    for subkey, value in subdict.iteritems():
            print subkey, value
Run Code Online (Sandbox Code Playgroud)

请注意,使用Python 3时,您需要使用items()而不是iteritems(),因为它已被重命名.

  • 我得到``AttributeError:'list'对象没有属性'iteritems''' (2认同)
  • @OivaEskola在Python 3中iteritems()方法已重命名为items(),因此可能是问题所在。 (2认同)