Метод позволяющий выбрать значения словаря внутри словаря

Как можно получить данные из словаря в словаре?

Например, запарсив данные из ВК по получению фото, видим что выдается следующее:

    {
"response": {
"count": 230,
"items": [{
"album_id": -7,
"date": 1525187973,
"id": 456316241,
"owner_id": 1,
"has_tags": false,
"sizes": [{
 ....
}],
"text": "",
"likes": {
"user_likes": 0,
"count": 110405
},
"reposts": {
"count": 124
},
  "comments": {
    "count": 11666
}

Хочу получить "голые" данные:

import pandas as pd

df = pd.DataFrame(profile_photos, columns=['owner_id','likes','comments'])

и ожидаю:

owner_id      likes      comments
0  1        110405           11666

, а получаю, естественно:

owner_id                          likes          comments
0  1  {'user_likes': 0, 'count': 110405}  {'count': 11666}

То есть, возможно ли каким-то образом извлечь значение из словаря DataFrame, не прибегая к дополнительным изощрениям, типа цикла? Чтобы в дальнейшем осуществлять сортировку по полученным данным.


Ответы (1 шт):

Автор решения: MaxU

Можно воспользоваться json_normalize(...).

Пример:

In [14]: data = {'response': {'count': 230,
    ...:   'items': [{'album_id': -7,
    ...:     'date': 1525187973,
    ...:     'id': 456316241,
    ...:     'owner_id': 1,
    ...:     'has_tags': False,
    ...:     'sizes': [{}],
    ...:     'text': '',
    ...:     'likes': {'user_likes': 0, 'count': 110405},
    ...:     'reposts': {'count': 124},
    ...:     'comments': {'count': 11666}}]}}

In [15]: res = pd.json_normalize(data["response"]["items"])

In [16]: res
Out[16]:
   album_id        date         id  owner_id  has_tags sizes text  likes.user_likes  likes.count  reposts.count  \
0        -7  1525187973  456316241         1     False  [{}]                      0       110405            124

   comments.count
0           11666
→ Ссылка