2016-04-06 13 views
0

Birden çok düzeyli bir sözlüğü yinelemek ve dört bağımsız değişken gerektiren bir ikinci işlevi ssocr yürütmek için bir işlev oluşturdum: koordinat, arka plan, ön plan, tür (bunlar benim anahtarlarımın değeridir)). Bu bir json dosyasından alınmış olan sözlüğüm. Bir iteritems döngüsünde bir değeri geçersiz kılma

document json

son iteritems ise
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 

Sadece name anahtarı için doğru değeri olsun. score anahtarı görünmüyor. Benim results['players_home'] sözlükte name geçersiz kılma score benziyor

çıkışı: ... "player4": {"name": 9}, "player5": {"name": 24} ...

ben yanlış yapıyorum ... "player4": {"name": 9, "score": value}, "player5": {"name": 24, "score": value} ...

gibi bir şey istersiniz? Full Code

cevap

0

Bu/bir sorun olabilir: Burada her ihtimale tam bir kod olan döngüde

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

, k2'fouls' olmadığını her zaman, yeni bir boş yarat Dict ve results['players_home'] içinde saklayın. Bu, daha önce depolanmış herhangi bir girişin artık erişilebilir olmadığı anlamına gelir.

+0

Bu deyimi döngü dışında taşımak doğru şekilde çalışıyor. Teşekkürler – Eldar88