web-dev-qa-db-ja.com

python:jsonとループの辞書を読む

私は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'}
17
ZiTAL

それは一般的に良いようです。

最初にファイルを読み取ってからロードを使用する必要はありません。 loadを直接使用できます。

_output_json = json.load(open('/tmp/output.json'))
_

Iとkを使用することは、これには正しくありません。これらは通常、整数ループカウンターにのみ使用する必要があります。この場合、それらはキーなので、より適切なものがより良いでしょう。おそらく、icontainerに、kstreamに名前変更しますか?より多くの情報を伝えるものは、読みやすく、保守しやすくなります。

output_json.iteritems()を使用すると、キーと値の両方を同時に反復処理できます。

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

Python 3を使用する場合、名前が変更されているため、iteritems()ではなくitems()を使用する必要があることに注意してください。

34
chmullig