2017-05-16 12 views
2

ある処理をしながら、あるテーブルから別のテーブルにデータを移動したいとします。データはそのソースで大きなJsonオブジェクトですので、個々の値を除外してデータを選択しています。私はデータを行ごとに以下の関数に渡します。ネストされた値へのアクセス

def transformBadges(row): 
    for inner_row in row: 
     for element in inner_row : 
      id = element['id'] 
      archived = element['archived'] 
      type = element['type'] 
      name = element['name'] 
      badge_id = str(uuid.uuid4()) 

      insertBadge(id, archived, type, name, badge_id) 

rowには、基本的に私のターゲット列が含まれています。しかし私はいくつかの列を選択するように私の選択を更新しました。このため、私は以下に上記のコードを変更する必要がありました:私の心の中で

def transformBadges(row): 
    badges = row['badges'] 
    for inner_row in badges: 
     for element in inner_row: 
      id = element['id'] 
      archived = element['archived'] 
      type = element['type'] 
      name = element['name'] 
      badge_id = str(uuid.uuid4()) 

      insertBadge(id, archived, type, name, badge_id) 

が、それはまったく同じだ - ちょうど今、別の変数に格納されたデータで。しかし、私はこのエラーを受け取ります:

Traceback (most recent call last): 
    File "etl/main.py", line 537, in <module> 
    main() 
    File "etl/main.py", line 99, in main 
    transformBadges(row) 
    File "etl/main.py", line 106, in transformBadges 
    id = element['id'] 
TypeError: string indices must be integers 

なぜ、最初の仕事は2番目ではないのですか?

答えて

2
def transformBadges(row): 
    badges = row['badges'] 
    for element in badges: 
     id = element['id'] 
     archived = element['archived'] 
     type = element['type'] 
     name = element['name'] 
     badge_id = str(uuid.uuid4()) 

     insertBadge(id, archived, type, name, badge_id) 

badgesは今すでに

+1

なるほど1 inner_rowであるためには、理にかなっています!期限が過ぎると回答を受け付けます – Someguywhocodes