2016-04-06 3 views
0

私は複数レベルの辞書を反復処理する関数を作成し、coord、background、foreground、typeの4つの引数を必要とするssocrの2番目の関数を実行しました。 )。これはjsonファイルから取った私の辞書です。私はちょうどnameキーの正しい値を取得し、最後iteritemsでiteritemsループの値をオーバーライド

document json

def parse_image(self, d): 
    bg = d['background'] 
    fg = d['foreground'] 
    results = {} 
    for k, v in d['boxes'].iteritems(): 
     if 'foreground' in d['boxes']: 
      myfg = d['boxes']['foreground'] 
     else: 
      myfg = fg 
     if k != 'players_home' and k != 'players_opponent': 
      results[k] = MyAgonism.ssocr(v['coord'], bg, myfg, v['type']) 

    results['players_home'] = {} 
    for k, v in d['boxes']['players_home'].iteritems(): 
     if 'foreground' in d['boxes']['players_home']: 
      myfg = d['boxes']['players_home']['foreground'] 
     else: 
      myfg = fg 
     if k != 'background' and k != 'foreground': 
      for k2, v2 in d['boxes']['players_home'][k].iteritems(): 
       if k2 != 'fouls': 
        results['players_home'][k] = {} 
        results['players_home'][k][k2] = MyAgonism.ssocr(v2['coord'], bg, myfg, v2['type']) 

    return results 

scoreキーは表示されません。それは私のresults['players_home']辞書

出力にnameオーバーライドscore次のようになります。... "player4": {"name": 9}, "player5": {"name": 24} ...

私は私が間違って何をやっている... "player4": {"name": 9, "score": value}, "player5": {"name": 24, "score": value} ...

のようなものをご希望ですか?ここでは完全なコードは、念のためにある:これは/問題かもしれませんFull Code

答えて

0

:あなたのループでは

  if k2 != 'fouls': 
       results['players_home'][k] = {} 

k2'fouls'ではないことをするたびに、新しい空の作成しますそれをresults['players_home']に保管してください。つまり、以前にそこに格納されたエントリは、アクセスできなくなります。

+0

ループ外でそのステートメントを動かすと正しく動作します。ありがとう – Eldar88

関連する問題