【问题标题】:python: read json and loop dictionarypython:读取json和循环字典
【发布时间】:2011-07-06 01:26:37
【问题描述】:

我正在学习 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']

这里是 JSON:

{   
 "webm":{
    "video": "libvp8",
    "audio": "libvorbis"   
 },   
  "h264":   {
    "video": "libx264",
    "audio": "libfaac"   
 },   
  "ogg":   {
    "video": "libtheora",
    "audio": "libvorbis"   
 }
}

这里输出:

> 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'}

【问题讨论】:

    标签: python json loops dictionary


    【解决方案1】:

    这看起来一般都很好。

    无需先读取文件,然后使用加载。你可以直接使用load。

    output_json = json.load(open('/tmp/output.json'))
    

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

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

    for majorkey, subdict in output_json.iteritems():
        print majorkey
        for subkey, value in subdict.iteritems():
                print subkey, value
    

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

    【讨论】:

    • 我收到AttributeError: 'list' object has no attribute 'iteritems'
    • 这表明您的 JSON 文件不包含字典,而是包含列表。也许它是 1 个字典的列表?试着把它打印出来,看看它到底包含什么。
    • @OivaEskola iteritems() 方法在 Python 3 中已重命名为 items(),所以这可能是问题所在。
    【解决方案2】:

    json_data = json.loads(url)

    如果列表存在,则迭代:

     for majorkey, subdict in json_data.iteritems():
       for one_majorkey in subdict:
        for subkey, value in one_majorkey.iteritems():
            for each_subkey, valu_U in value.iteritems():
                for each_sub_subkey, value_Q in valu_U.iteritems():
                    for each_sub_sub_subkey, value_num in value_Q.iteritems():
                        print each_sub_sub_subkey, value_num
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-07-28
      • 1970-01-01
      • 2018-07-13
      • 2013-11-12
      • 2017-07-21
      • 1970-01-01
      • 2022-11-18
      相关资源
      最近更新 更多