1

JSON の結果で構成される Python 辞書があります。ディクショナリには、ネストされたディクショナリを含むネストされたリストが含まれるネストされたディクショナリが含まれています。まだ私と一緒に?次に例を示します。

{'hits':{'results':[{'key1':'value1', 
                    'key2':'value2', 
                    'key3':{'sub_key':'sub_value'}},
                   {'key1':'value3',
                    'key2':'value4',
                    'key3':{'sub_key':'sub_value2'}}
                  ]}}

辞書から取得したいのは、sub_valeそれぞれのsub_keyであり、別のリストに保存します。何を試してもエラーが発生し続けます。

これが私の最後の試みでした:

inner_list=mydict['hits']['results']#This is the list of the inner_dicts

index = 0
    for x in inner_list:
        new_dict[index] = x[u'sub_key']
        index = index + 1

print new_dict

最初のいくつかの結果を出力し、元の辞書のすべてを返し始めました。私はそれを理解することができません。new_dict[index]行をprintステートメントに置き換えると、画面に完全に出力されます。これについて本当にいくつかの入力が必要です!

for x in inner_list:
    print x[u'sub_key']
4

5 に答える 5

1

インデックスエラーは、のサイズよりも大きいnew_dict[index]場所から発生しています。indexnew_dict

リスト内包表記を考慮する必要があります。一般的には優れていますが、これがループでどのように機能するかを理解するのに役立ちます。代わりにこれを試してください。

new_list = []
for x in inner_list:
    new_list.append(x[u'sub_key'])

print new_list

dictを使い続けたいが、キーにインデックスを使用する場合は、次のことを試してください。

index = 0
new_dict = {}
    for x in inner_list:
        new_dict[index] = x[u'sub_key']
        index = index + 1

print new_dict

さて、以下のコメントに基づいて、これはあなたが望んでいたことだと思います。

inner_list=mydict['hits']['results']#This is the list of the inner_dicts

new_dict = {}
for x in inner_list:
    new_dict[x['key2']] = x['key3']['sub_key']

print new_dict
于 2012-07-09T18:38:06.497 に答える
1

入れ子のレベルを忘れました。

for x in inner_list:
    for y in x:
        if isinstance(x[y], dict) and 'sub_key' in x[y]:
            new_dict.append( x[y]['sub_key'] )
于 2012-07-09T18:38:19.013 に答える
1

x辞書です

の最初の繰り返しでfor x in ...

x={'key1':'value1', 
                'key2':'value2', 
                'key3':{'sub_key':'sub_value'}},

sub_key鍵がxなく、むしろ中にあることに注意してくださいx['key3']['sub_key']

于 2012-07-09T18:17:32.520 に答える
1
>>> dic={'hits':{'results':[{'key1':'value1', 
                    'key2':'value2', 
                    'key3':{'sub_key':'sub_value'}},
                   {'key1':'value3',
                    'key2':'value4',
                    'key3':{'sub_key':'sub_value2'}}
                  ]}}
>>> inner_list=dic['hits']['results']
>>> [x[y]['sub_key'] for x in inner_list for y in x if isinstance(x[y],dict)]
['sub_value', 'sub_value2']

key3そして、それが常に inner を含んでいると確信している場合は、次のようになりますdict

>>> [x['key3']['sub_key'] for x in inner_list]
['sub_value', 'sub_value2']

を使用せずにList comprehensions:

>>> lis=[]
>>> for x in inner_list:
    for y in x:
        if isinstance(x[y],dict):
            lis.append(x[y]['sub_key'])


>>> lis
['sub_value', 'sub_value2']
于 2012-07-09T18:21:28.733 に答える
1

いくつかの仮定をした後:

[e['key3']['sub_key'] for e in x['hits']['results']]

すべてのインスタンスを変更するには:

for e in x['hits']['results']:
 e['key3']['sub_key'] = 1
于 2012-07-09T18:24:07.620 に答える