Python: читать словарь JSON и цикл - PullRequest
15 голосов
/ 28 февраля 2011

Я изучаю 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'}

Ответы [ 2 ]

33 голосов
/ 28 февраля 2011

Кажется, что это нормально.

Нет необходимости сначала читать файл, а затем использовать загрузки. Вы можете просто использовать нагрузку напрямую.

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 (), так как он был переименован.

0 голосов
/ 29 октября 2016

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...