2016-01-12 2 views
-1

Я пытаюсь теперь понять, что здесь происходит, но почему управление потоком вложенных циклов в работе Python они, как они это делают в данном конкретном случае:Понимание потока управления вложенным для петель SANs перерыв заявление

# let's say that `res` is a list of dictionaries where len(res) == 20 

for index, item in enumerate(res): 
     print index,item 
     for key, value in item.iteritems(): 
      id = item.get('id') 
      print id 
      video_asset_ids.append(id) 
      # break   

Выхода из выше вложенных циклов выглядит следующим образом:

0 {u'updated_at': u'2012-09-18T22:07:37.027Z', u'account_id': u'2001', u'duration': 232410, u'text_tracks': [], u'images': {u'poster': {u'asset_id': u'34343615001', u'width': None, u'height': None}]}, u'thumbnail': {u'asset_id': u'34343614001', u'width': None, u'height': None}]}}, u'digital_master_id': None, u'custom_fields': {}, u'schedule': {u'starts_at': u'2009-08-18T00:53:17.569Z', u'ends_at': None}, u'id': u'34351747001', u'state': u'ACTIVE', u'cue_points': [], u'sharing': {u'source_id': None, u'to_external_acct': True, u'by_id': None, u'by_reference': False, u'by_external_acct': False}, u'complete': True, u'tags': [u'football', u'nfl network nfl films football', u'tv', u'sports', u'pro', u'entertainment'], u'link': None, u'reference_id': u'1578699', u'geo': None, u'name': u'Video: Inside NFL Films', u'created_at': u'2009-08-18T00:53:17.569Z', u'economics': u'AD_SUPPORTED', u'original_filename': None, u'folder_id': None} 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
4416825569001 
1 {u'updated_at': u'2012-09-18T22:07:37.027Z', u'account_id': u'2001', u'duration': 232410, u'text_tracks': [], u'images': {u'poster': {u'asset_id': u'34343615001', u'width': None, u'height': None}]}, u'thumbnail': {u'asset_id': u'34343614001', u'width': None, u'height': None}]}}, u'digital_master_id': None, u'custom_fields': {}, u'schedule': {u'starts_at': u'2009-08-18T00:53:17.569Z', u'ends_at': None}, u'id': u'34351747001', u'state': u'ACTIVE', u'cue_points': [], u'sharing': {u'source_id': None, u'to_external_acct': True, u'by_id': None, u'by_reference': False, u'by_external_acct': False}, u'complete': True, u'tags': [u'football', u'nfl network nfl films football', u'tv', u'sports', u'pro', u'entertainment'], u'link': None, u'reference_id': u'1578699', u'geo': None, u'name': u'Video: Inside NFL Films', u'created_at': u'2009-08-18T00:53:17.569Z', u'economics': u'AD_SUPPORTED', u'original_filename': None, u'folder_id': None} 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 
34351747001 

и т.д., и т.д.

Очевидно, когда мы добавим break заявления в вложенный цикл, id объект печатается только один раз, и результат выглядит следующим образом:

0 {u'updated_at': u'2012-09-18T22:07:37.027Z', u'account_id': u'2001', u'duration': 232410, u'text_tracks': [], u'images': {u'poster': {u'asset_id': u'34343615001', u'width': None, u'height': None}]}, u'thumbnail': {u'asset_id': u'34343614001', u'width': None, u'height': None}]}}, u'digital_master_id': None, u'custom_fields': {}, u'schedule': {u'starts_at': u'2009-08-18T00:53:17.569Z', u'ends_at': None}, u'id': u'34351747001', u'state': u'ACTIVE', u'cue_points': [], u'sharing': {u'source_id': None, u'to_external_acct': True, u'by_id': None, u'by_reference': False, u'by_external_acct': False}, u'complete': True, u'tags': [u'football', u'nfl network nfl films football', u'tv', u'sports', u'pro', u'entertainment'], u'link': None, u'reference_id': u'1578699', u'geo': None, u'name': u'Video: Inside NFL Films', u'created_at': u'2009-08-18T00:53:17.569Z', u'economics': u'AD_SUPPORTED', u'original_filename': None, u'folder_id': None} 
4416825569001 
1 {u'updated_at': u'2012-09-18T22:07:37.027Z', u'account_id': u'2001', u'duration': 232410, u'text_tracks': [], u'images': {u'poster': {u'asset_id': u'34343615001', u'width': None, u'height': None}]}, u'thumbnail': {u'asset_id': u'34343614001', u'width': None, u'height': None}]}}, u'digital_master_id': None, u'custom_fields': {}, u'schedule': {u'starts_at': u'2009-08-18T00:53:17.569Z', u'ends_at': None}, u'id': u'34351747001', u'state': u'ACTIVE', u'cue_points': [], u'sharing': {u'source_id': None, u'to_external_acct': True, u'by_id': None, u'by_reference': False, u'by_external_acct': False}, u'complete': True, u'tags': [u'football', u'nfl network nfl films football', u'tv', u'sports', u'pro', u'entertainment'], u'link': None, u'reference_id': u'1578699', u'geo': None, u'name': u'Video: Inside NFL Films', u'created_at': u'2009-08-18T00:53:17.569Z', u'economics': u'AD_SUPPORTED', u'original_filename': None, u'folder_id': None} 
34351747001 

и т.д., и т.д.

Так что без заявления излома, как эти циклы функционирования с точки зрения управления потоком (или на мешок)? Почему, без инструкции break, вложенные циклы сохраняют один и тот же объект id числом, равным количеству элементов в списке?

ответ

1

Проникновение через item.iteritems() проходит через каждую key, value пару в словаре, поэтому вы печатаете один и тот же идентификатор для каждой пары. Вам вообще не нужен внутренний контур. Попробуйте следующее:

for index, item in enumerate(res): 
    print index,item 
    id = item.get('id') 
    print id 
    video_asset_ids.append(id) 
1

На каждой итерации вашей внутренней петли key и value должны быть разными, но item - это то же самое. item изменения с каждой итерацией вашего внешний цикл.

Поскольку вы получаете id от item, то id не будет изменяться на каждой внутренней итерации.

Возможно, вы должны получить id от key или value.

Смежные вопросы