Задать вопрос

Достать и сохранить глубоко вложенные элементы массива?

Здравствуйте. У меня есть такой массив данных(Сократил кол-во эл-тов, чтоб влезло в вопрос):
{'response': {'count': 2, 'items': [{'id': 457242736, 'album_id': -6, 'owner_id': 232525304, 'sizes': [{'type': 'm', 'url': 'https://sun9-53.userapi.com/c850436/v850436092/163...', 'width': 130, 'height': 65}, {'type': 'o', 'url': 'https://sun9-37.userapi.com/c850436/v850436092/163...', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://sun9-22.userapi.com/c850436/v850436092/163...', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://sun9-50.userapi.com/c850436/v850436092/163...', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://sun9-7.userapi.com/c850436/v850436092/163c...', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://sun9-45.userapi.com/c850436/v850436092/163...', 'width': 75, 'height': 37}, {'type': 'x', 'url': 'https://sun9-46.userapi.com/c850436/v850436092/163...', 'width': 604, 'height': 302}, {'type': 'y', 'url': 'https://sun9-27.userapi.com/c850436/v850436092/163...', 'width': 807, 'height': 403}, {'type': 'z', 'url': 'https://sun9-36.userapi.com/c850436/v850436092/163...', 'width': 1080, 'height': 540}], 'text': '', 'date': 1562700296, 'post_id': 630}, {'id': 456242647, 'album_id': -6, 'owner_id': 232525304, 'sizes': [{'type': 'm', 'url': 'https://sun9-40.userapi.com/c852032/v852032335/12e...', 'width': 130, 'height': 73}, {'type': 'o', 'url': 'https://sun9-48.userapi.com/c852032/v852032335/12e...', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://sun9-40.userapi.com/c852032/v852032335/12e...', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://sun9-45.userapi.com/c852032/v852032335/12e...', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://sun9-4.userapi.com/c852032/v852032335/12e2...', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://sun9-24.userapi.com/c852032/v852032335/12e...', 'width': 75, 'height': 42}, {'type': 'x', 'url': 'https://sun9-55.userapi.com/c852032/v852032335/12e...', 'width': 604, 'height': 340}, {'type': 'y', 'url': 'https://sun9-21.userapi.com/c852032/v852032335/12e...', 'width': 807, 'height': 454}, {'type': 'z', 'url': 'https://sun9-48.userapi.com/c852032/v852032335/12e...', 'width': 960, 'height': 540}], 'text': '', 'date': 1560206965, 'post_id': 628}]}}
Мне нужно пройтись по нему, в каждом элементе добраться до ссылки, и сохранить эти ссылки куда-нибудь, чтоб потом скачать файлы. Например, для каждой картинки сохранить только одну ссылку, где 'type': 'r'. Пытался сделать что-то подобное:
n = 0
urls = {}
for el in data['response']['items']:
urls['item'] = data['response']['items'][n]
urls['type'] = data['response']['items'][n]['sizes'][4]['type']
urls['url'] = data['response']['items'][n]['sizes'][4]['url']
n += 1
print(urls)
Очевидно, что при таком проходе у меня все элементы затираются, кроме последнего. Как правильно решить задачу?
  • Вопрос задан
  • 103 просмотра
Подписаться 1 Простой Комментировать
Решения вопроса 1
@iddqda
network engineer, netdevops
ll =  res['response']['items']
urllist = []
for l in ll:
    urls = [ d['url'] for d in l['sizes'] if d['type'] == 'r' ]
    urllist.append(urls)

In [4]: urllist                                                                                                                                   
Out[4]: 
[['https://sun9-7.userapi.com/c850436/v850436092/163c...'],
 ['https://sun9-4.userapi.com/c852032/v852032335/12e2...']]
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@szelga
как-то так:

urls = []
for el in data['response']['items']:
    _url = {}
    _url['item'] = el
    _url['type'] = el['sizes'][4]['type']
    _url['url'] = el['sizes'][4]['url']
    urls.append(_url)
print(urls)
Ответ написан
Комментировать
1. urls - переименовать в url
2. перед for обьявить лист типа urls_list
3. после последней обработки url добавлять в urls_list его копию
результат будет в urls_list
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы