Извлечение данных из dict - PullRequest
0 голосов
/ 19 марта 2019

Вот пример данных, с которыми я работаю.

{'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/1v2mrzYSYG6onNLt2qTj13hkQZk"',
 'items': [{'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/Xy1mB4_yLrHy_BmKmPBggty2mZQ"',
            'id': '1',
            'kind': 'youtube#videoCategory',
            'snippet': {'assignable': True,
                        'channelId': 'UCBR8-60-B28hp2BmDPdntcQ',
                        'title': 'Film & Animation'}},
           {'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/UZ1oLIIz2dxIhO45ZTFR3a3NyTA"',
            'id': '2',
            'kind': 'youtube#videoCategory',
            'snippet': {'assignable': True,
                        'channelId': 'UCBR8-60-B28hp2BmDPdntcQ',
                        'title': 'Autos & Vehicles'}},
           {'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/nqRIq97-xe5XRZTxbknKFVe5Lmg"',
            'id': '10',
            'kind': 'youtube#videoCategory',
            'snippet': {'assignable': True,
                        'channelId': 'UCBR8-60-B28hp2BmDPdntcQ',
                        'title': 'Music'}},
 'kind': 'youtube#videoCategoryListResponse'}

Я бы хотел извлечь 2 столбца данных

  1. 'id'
  2. 'title'

Т.е.из первого пункта у меня будет 'id' = 1, 'title' = Film & Animation

Я очень плохо знаком с Python, что будет лучшим способом сделать это в Python?

Спасибо всем большое!

Ответы [ 3 ]

0 голосов
/ 20 марта 2019

'items' - это список объектов, через которые вы можете пройти через цикл for:

for item in your_data['items']:
    id = item['id']
    title = item['snippet']['title']
    print(id, title)
0 голосов
/ 20 марта 2019

Думаю, есть опечатка, клавиша 'items', это list, и всякий раз, когда мы начинаем скобки ([), мы должны закрывать их (]).

{'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/1v2mrzYSYG6onNLt2qTj13hkQZk"',
 'items': [{'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/Xy1mB4_yLrHy_BmKmPBggty2mZQ"',
            'id': '1',
            'kind': 'youtube#videoCategory',
            'snippet': {'assignable': True,
                        'channelId': 'UCBR8-60-B28hp2BmDPdntcQ',
                        'title': 'Film & Animation'}},
           {'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/UZ1oLIIz2dxIhO45ZTFR3a3NyTA"',
            'id': '2',
            'kind': 'youtube#videoCategory',
            'snippet': {'assignable': True,
                        'channelId': 'UCBR8-60-B28hp2BmDPdntcQ',
                        'title': 'Autos & Vehicles'}},
           {'etag': '"ld9biNPKjAjgjV7EZ4EKeEGrhao/nqRIq97-xe5XRZTxbknKFVe5Lmg"',
            'id': '10',
            'kind': 'youtube#videoCategory',
            'snippet': {'assignable': True,
                        'channelId': 'UCBR8-60-B28hp2BmDPdntcQ',
                        'title': 'Music'}},     # <-----  HERE, no brackets
 'kind': 'youtube#videoCategoryListResponse'}

Понимание списка

# all items
[row for row in data['items']]   

# custom data from all items
[(row['id'], row['snippet']['title']) for row in data['items']]     

# just id > 0 (filtering data)
[row for row in data['items'] if row['id']>0]   

объединяет оба фильтра, извлекая специальные поля:

[(r['id'], r['snippet']['title']) for r in data['items'] if r['id'] > 0]   

Также дайте filter шанс

это действительно круто

f = lambda r: (r['id'], r['snippet']['title'])
result = filter(f, data['items'])
0 голосов
/ 20 марта 2019

Я думаю, что это

for it in data['items']:
  print(it['id'], it['snippet']['title'])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...