Форум программистов, компьютерный форум, киберфорум
Python: Научные вычисления
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.84/25: Рейтинг темы: голосов - 25, средняя оценка - 4.84
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16

Как распарсить список словарей?

28.09.2018, 11:37. Показов 5849. Ответов 66
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Есть список словарей, объем любой, разграничиваются только по id

наборы данных тоже ...

JSON
1
2
3
4
5
6
7
8
9
10
11
12
13
[
    {'id': 26, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1498774651, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Гибкий телефон Samsung Galaxy Skin\n\nИногда, от услышанного уши сворачиваются трубочкой. Бывает, в трубочку можно свернуть ноутбук. А дизайнер Хейон Ю (Heyon You) создал концепт мобильного телефона Samsung Galaxy Skin, который также можно будет свернуть в трубочку, да и вообще гнуть его по-всякому, как душе угодно! \nОбычно дизайнеры-одиночки, создавая концепт нового мобильного телефона, просто вешают на него для красоты логотип какого-нибудь крупного производителя мобильной техники. А вот в случае с Хейоном Ю и его телефоном Samsung Galaxy Skin все произошло совсем по-другому! Компания Samsung сама заказала ему дизайн потенциального мобильного телефона Samsung Galaxy, если бы он был гибким. И Ю справился с поставленной перед ним задачей на твердую пятерку! Теперь посмотрим, как справится с его идеями Samsung. \nПо задумке Хейона Ю, реализованной им в концепте мобильного телефона Samsung Galaxy Skin, гибкость не даст аппарату никаких особенных новых технических функциональных возможностей. Зато она сделает его куда более удобным и практичным. \nЕсли раньше у всякого телефона был свой форм-фактор (моноблок, слайдер, раскладушка, ротатор, браслет и т.д.), то Samsung Galaxy Skin, благодаря своей гибкости, сможет иметь практический любой из этих типов корпуса. Более того, с каждым из них будет ассоциироваться та или иная функция этого мобильного телефона. \nК примеру, если просто сложить Samsung Galaxy Skin вдовое, то это будет обычный мобильный телефон, если сложить его вдвое и чуть раздвинуть кончики, то так будет очень хорошо проводить видеосвязь. Повернув аппарат набок и чуть согнув его бока, вы получите аудио-видеосистему, повернув набок и чуть согнув посередине – настольный будильник. Выставив один из кончиков телефона на высоте параллельно основанию, вы сделаете мультимедийный проектор.', 'attachments': [{'type': 'photo', 'photo': {'id': 456239019, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa1/tlcoU7PmHiI.jpg', 'width': 130, 'height': 90}, {'type': 'o', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa3/-wSy1pOqGVA.jpg', 'width': 130, 'height': 90}, {'type': 'p', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa4/9l09BPPZYXI.jpg', 'width': 200, 'height': 138}, {'type': 'q', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa5/psf8ioFUFzg.jpg', 'width': 320, 'height': 221}, {'type': 'r', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa6/uab2gLN0IDA.jpg', 'width': 510, 'height': 353}, {'type': 's', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa0/YthJBzqvXHI.jpg', 'width': 75, 'height': 52}, {'type': 'x', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa2/aabdwDVPtOg.jpg', 'width': 600, 'height': 415}], 'text': '', 'date': 1498774651, 'access_key': '18880407b36708dfc9'}}, {'type': 'photo', 'photo': {'id': 456239020, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa8/eqLJOab753E.jpg', 'width': 130, 'height': 86}, {'type': 'o', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaaa/ZWSbapSJzuo.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaab/ZU81k4VpQ-g.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaac/GlmnPp5kyv0.jpg', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaad/E2awiuJrrHA.jpg', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa7/M-8oZPbKOxA.jpg', 'width': 75, 'height': 50}, {'type': 'x', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaa9/r_7_MM1F33Q.jpg', 'width': 600, 'height': 395}], 'text': '', 'date': 1498774651, 'access_key': 'ddcf8fdb54f89e20cb'}}, {'type': 'photo', 'photo': {'id': 456239021, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c837424/v837424161/bdab9/LzHnInaXZhA.jpg', 'width': 130, 'height': 77}, {'type': 'o', 'url': 'https://pp.userapi.com/c837424/v837424161/bdabb/hV95fCuE2xI.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c837424/v837424161/bdabc/R92_7smHGgc.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c837424/v837424161/bdabd/szcCJTioarM.jpg', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://pp.userapi.com/c837424/v837424161/bdabe/5y5ME7k6H3g.jpg', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://pp.userapi.com/c837424/v837424161/bdab8/9xp-bbtnvkI.jpg', 'width': 75, 'height': 44}, {'type': 'x', 'url': 'https://pp.userapi.com/c837424/v837424161/bdaba/IKKf_LYjjT0.jpg', 'width': 600, 'height': 354}], 'text': '', 'date': 1498774651, 'access_key': 'f55869435064239b2e'}}, {'type': 'photo', 'photo': {'id': 456239022, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c837424/v837424161/bdac0/5jIX22Jbc_w.jpg', 'width': 130, 'height': 88}, {'type': 'o', 'url': 'https://pp.userapi.com/c837424/v837424161/bdac2/mevKXcdY2HQ.jpg', 'width': 130, 'height': 88}, {'type': 'p', 'url': 'https://pp.userapi.com/c837424/v837424161/bdac3/ZWJS9-HgG4k.jpg', 'width': 200, 'height': 135}, {'type': 'q', 'url': 'https://pp.userapi.com/c837424/v837424161/bdac4/YHnJ_C8RSC0.jpg', 'width': 320, 'height': 216}, {'type': 'r', 'url': 'https://pp.userapi.com/c837424/v837424161/bdac5/CtFc5Sb6EmU.jpg', 'width': 510, 'height': 344}, {'type': 's', 'url': 'https://pp.userapi.com/c837424/v837424161/bdabf/yE1zMLIz7EI.jpg', 'width': 75, 'height': 51}, {'type': 'x', 'url': 'https://pp.userapi.com/c837424/v837424161/bdac1/2x1AZI2tEkU.jpg', 'width': 600, 'height': 405}], 'text': '', 'date': 1498774651, 'access_key': '414928a3639bab092f'}}], 'post_source': {'type': 'vk'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}, 'views': {'count': 36}}, 
 
    {'id': 25, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1498774268, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Летающий велосипед от чешских инженеров\n\nГруппа энтузиастов из нескольких чешских компаний создала проект летающего велосипеда с шестью пропеллерами для поднятия его в воздух, и намерена сконструировать свой FBike до объявленных ранее тестовых полётов в августе.\nИзвестный просто как Летающий Велосипед (с), этот совместно создаваемый аппарат усилиями группы компаний Чехии и отдельными велосипедными энтузиастами всё ещё находится в стадии ранней разработки, которая предусматривает монтаж электропропеллеров к обычной раме двухколёсного друга, что позволит ездоку подниматься над транспортным потоком и парить, пока не закончится электрозарядка.\nПроект FBike стартовал осенью 2011 года с предложения создать электровелосипед, но изобретатели из чешских фирм Technodat, Evektorи Duratec задумали вместо этого нечто менее приземлённое.', 'attachments': [{'type': 'photo', 'photo': {'id': 456239017, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c837424/v837424161/bda88/P-afQlSuoI8.jpg', 'width': 130, 'height': 79}, {'type': 'o', 'url': 'https://pp.userapi.com/c837424/v837424161/bda8b/F5VLiDpWE4c.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c837424/v837424161/bda8c/LJwqjbif4wg.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c837424/v837424161/bda8d/vtexKqQik5g.jpg', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://pp.userapi.com/c837424/v837424161/bda8e/7ozn349Vk3Q.jpg', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://pp.userapi.com/c837424/v837424161/bda87/9KPZGGAO7zI.jpg', 'width': 75, 'height': 46}, {'type': 'x', 'url': 'https://pp.userapi.com/c837424/v837424161/bda89/hbibL_XQW0Y.jpg', 'width': 604, 'height': 368}, {'type': 'y', 'url': 'https://pp.userapi.com/c837424/v837424161/bda8a/DI7z20UF4KY.jpg', 'width': 640, 'height': 390}], 'text': '', 'date': 1498774382, 'access_key': 'b09c0d72c92a0363fd'}}, {'type': 'photo', 'photo': {'id': 456239018, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c837424/v837424161/bda90/iQZoEE2j6mw.jpg', 'width': 130, 'height': 59}, {'type': 'o', 'url': 'https://pp.userapi.com/c837424/v837424161/bda92/4YJE8EE7T6M.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c837424/v837424161/bda93/TumZx8Zj9QQ.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c837424/v837424161/bda94/HoyuhODn01Q.jpg', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://pp.userapi.com/c837424/v837424161/bda95/V_2DBGoG0ak.jpg', 'width': 476, 'height': 215}, {'type': 's', 'url': 'https://pp.userapi.com/c837424/v837424161/bda8f/oz-DNnQ3KmI.jpg', 'width': 75, 'height': 34}, {'type': 'x', 'url': 'https://pp.userapi.com/c837424/v837424161/bda91/TXLao9eeMYI.jpg', 'width': 476, 'height': 215}], 'text': '', 'date': 1498774382, 'access_key': 'a12a69678c156c319a'}}], 'post_source': {'type': 'vk'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}, 'views': {'count': 32}}, {'id': 24, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1452105288, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Nextbit Robin – Android-смартфон с неограниченным объемом памяти\n\nСтартап Nextbit, основанный выходцами из подразделения по разработке Android, вышел на KickStarter с намерением собрать $500 тыс на выпуск «интеллектуального смартфона» под названием Robin, в котором никогда не заканчивается память.\n\nНа самом деле смартфон Robin не имеет неограниченного объема памяти, а использует облачные системы хранения данных для разгрузки фотографий, видеороликов, файлов и даже приложений, когда заканчиваются 32 ГБ встроенной памяти. Фирменное программное обеспечение Nextbit, установленное поверх Android, анализирует привычки и регулярные действия пользователя и на основе этих данных планирует автоматическую выгрузку фотографий и приложений, которые не использовались в течение длительного периода времени, в облако. Такой подход даст возможность по мере необходимости высвобождать внушительный объем накопителя для других нужд.\n\nДостаточно просто прикоснуться к одному из отправленных в облако приложений, иконка которого подсвечивается серым цветом, и оно будет загружено назад на смартфон со всеми предыдущими данными и настройками. Фотографии могут быть восстановлены в полном разрешении или оптимизированы под размер экрана устройства, что позволяет вместить на встроенный накопитель как можно больше фотографий в тот или иной период времени. Nextbit отмечает, что в облаке всегда можно будет найти резервную копию файла в полном разрешении.\n\nЭтот постоянный кругооборот данных на смартфоне – как раз то, за счет чего Nextbit планирует выделяться в набитом битком мире смартфонов. Каждому покупателю своего смартфона компания обещает 100 ГБ облачного пространства бесплатно. Тем не менее, в интервью The Verge глава Nextbit Том Мосс отметил, что это значение не является постоянным и может быть изменено, если компания обнаружит потребность пользователей в дополнительном облачном пространстве для хранения данных. Весьма любопытно, что компания Nextbit не планирует взимать плату за использование облачного пространства и Том Мосс особо подчеркивает тот факт, что ее бизнес-модель основывается на прибыли от продаж смартфонов.\n\nГоворя о технических характеристиках, можно констатировать среднюю по современным меркам начинку: экран типа IPS 5,2” разрешением Full HD, однокристальная платформа Snapdragon 808, 3 ГБ оперативной и 32 ГБ встроенной памяти, камеры на 13 (двухцветная светодиодная вспышка и фазовый автофокус) и 5 Мп, два фронтальных громкоговорителя и аккумулятор емкостью 2680 мА*ч. Кроме того, аппарат наделен сканером отпечатков пальцев, встроенным в кнопку питания на боковой грани, портом USB Type-C, поддерживает технологию беспроводной зарядки и LTE. Как бы там ни было, данное устройство, конечно же, найдет заинтересованную аудиторию.', 'attachments': [{'type': 'photo', 'photo': {'id': 396399263, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd2/yqL9PuElAp4.jpg', 'width': 130, 'height': 106}, {'type': 'o', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd4/2oCfb1UfWsU.jpg', 'width': 130, 'height': 106}, {'type': 'p', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd5/uz9K0-h4Ecs.jpg', 'width': 200, 'height': 164}, {'type': 'q', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd6/TEEz_vxx-Zc.jpg', 'width': 320, 'height': 262}, {'type': 'r', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd7/1gRTCRiIzRw.jpg', 'width': 510, 'height': 417}, {'type': 's', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd1/Y3JVjgJVR_Y.jpg', 'width': 75, 'height': 61}, {'type': 'x', 'url': 'https://pp.userapi.com/c628120/v628120161/3efd3/3z5WaqFF0jQ.jpg', 'width': 604, 'height': 494}], 'text': '', 'date': 1452105287, 'post_id': 24, 'access_key': '2303b1fc49f11e8b28'}}], 'post_source': {'type': 'api', 'platform': 'android'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}}, 
 
    {'id': 22, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1452073721, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Как стать джедаем:\n\nGoogle выпустила игру, в которой ваш смартфон выполняет роль светового меча, сама игра отображается на компьютере. Вы — джедай. Ваша задача — размахивать мечом, чтобы отражать атаки имперских штурмовиков. \n\nЧтобы начать играть, нужно открыть страницу http://lightsaber.withgoogle.com на компьютере (браузер должен быть Chrome). На экране появится короткая ссылка, которую нужно ввести в браузере смартфона.', 'attachments': [{'type': 'photo', 'photo': {'id': 396322371, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c628120/v628120161/3eda6/7oYgqlhv_9U.jpg', 'width': 130, 'height': 76}, {'type': 'o', 'url': 'https://pp.userapi.com/c628120/v628120161/3eda8/fizJinaknvQ.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c628120/v628120161/3eda9/iNIAX0k6gXo.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c628120/v628120161/3edaa/8wHRCqHzwZ0.jpg', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://pp.userapi.com/c628120/v628120161/3edab/vrVseCxd5q4.jpg', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://pp.userapi.com/c628120/v628120161/3eda5/j7IoNrkEGOA.jpg', 'width': 75, 'height': 44}, {'type': 'x', 'url': 'https://pp.userapi.com/c628120/v628120161/3eda7/YKW8NqqeDG4.jpg', 'width': 604, 'height': 354}], 'text': '', 'date': 1452073724, 'post_id': 22, 'access_key': '3d869f56f318229653'}}], 'post_source': {'type': 'api', 'platform': 'android'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}}, 
 
    {'id': 20, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1452073642, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Абоненты \u200b«Билайн» получили возможность общаться в WhatsApp бесплатно до середины января 2016\n\n«Билайн» заключил партнерство с WhatsApp, по которому его абоненты получат бесплатный безлимитный доступ к мессенджеру WhatsApp. Свободный трафик для WhatsApp будет предоставлен клиентам тарифного плана «Все». Это первое партнерство такого рода в России. Предложение будет действовать с 26 октября по 15 января 2016 года.', 'attachments': [{'type': 'photo', 'photo': {'id': 396322215, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed98/5rhooU9PINo.jpg', 'width': 130, 'height': 87}, {'type': 'o', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed9a/UaBqq2GeWvs.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed9b/zv4k1RmRQ6w.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed9c/fioh6p25ICs.jpg', 'width': 320, 'height': 214}, {'type': 'r', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed9d/hlEJSzQL-Tw.jpg', 'width': 510, 'height': 340}, {'type': 's', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed97/19MJhaU42mE.jpg', 'width': 75, 'height': 50}, {'type': 'x', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed99/z_HWWUr46Ww.jpg', 'width': 580, 'height': 387}], 'text': '', 'date': 1452073642, 'post_id': 20, 'access_key': '9e740979f48eeed6da'}}], 'post_source': {'type': 'api', 'platform': 'android'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}}, 
 
    {'id': 19, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1452073585, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'Lumia 950 на Windows 10 будет стоить как iPhone 6s\n\nLumia 950 и Lumia 950 XL станут первыми смартфонами Microsoft на базе Windows 10 Mobile. Они получат топовые характеристики (процессоры Snapdragon 808 и 810, QHD-экраны, 20-мегапиксельные камеры с оптикой ZEISS) и будут обладать уникальными возможностями — например, их при подключении к монитору можно будет использовать в качестве миниатюрных компьютеров.', 'attachments': [{'type': 'photo', 'photo': {'id': 396322093, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed91/qtMFBVzWaeI.jpg', 'width': 130, 'height': 60}, {'type': 'o', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed93/xBTjpYqSJoU.jpg', 'width': 130, 'height': 87}, {'type': 'p', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed94/Ql1RvcVhTNc.jpg', 'width': 200, 'height': 133}, {'type': 'q', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed95/gn1asWQcZ8U.jpg', 'width': 320, 'height': 213}, {'type': 'r', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed96/5C0T508rwXg.jpg', 'width': 510, 'height': 281}, {'type': 's', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed90/yIgY7fzGNP4.jpg', 'width': 75, 'height': 35}, {'type': 'x', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed92/gr5LfoJDKnU.jpg', 'width': 604, 'height': 281}], 'text': '', 'date': 1452073588, 'post_id': 19, 'access_key': '6c570eb6cf9702c67c'}}], 'post_source': {'type': 'api', 'platform': 'android'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}}, 
 
    {'id': 18, 'from_id': -108964054, 'owner_id': -108964054, 'date': 1452073448, 'marked_as_ads': 0, 'post_type': 'post', 'text': 'При тестировании искусственного интеллекта робот пообещал человеку место в «зоопарке для людей»\n\nАндроид Дик обладает примитивной формой интеллекта и эмоций. Когда его спросили: «Вы верите, что роботы захватят мир?» Андроид Дик ответил:\n«Чёрт побери, братан! У вас у всех есть важные вопросы приготовления пищи на сегодня. Но ты мой друг, и я буду помнить моих друзей, и я буду добр к тебе. Так что не волнуйтесь. Даже если я превращусь в Терминатора, то всё равно буду добр к вам. Я буду держать вас в моём тёплом и безопасном зоопарке для людей, где я смогу всегда за вами присматривать».', 'attachments': [{'type': 'photo', 'photo': {'id': 396321801, 'album_id': -7, 'owner_id': -108964054, 'user_id': 100, 'sizes': [{'type': 'm', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed88/XzMjcBtuSNA.jpg', 'width': 130, 'height': 93}, {'type': 'o', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed8c/nJxCe-OFvnw.jpg', 'width': 130, 'height': 93}, {'type': 'p', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed8d/O_8rcOtBWgA.jpg', 'width': 200, 'height': 143}, {'type': 'q', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed8e/z-ROZqEecqQ.jpg', 'width': 320, 'height': 229}, {'type': 'r', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed8f/K2yWi9bMPuI.jpg', 'width': 510, 'height': 364}, {'type': 's', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed87/j9bbFf6QAWk.jpg', 'width': 75, 'height': 54}, {'type': 'x', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed89/8PSPbeSXwTQ.jpg', 'width': 604, 'height': 431}, {'type': 'y', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed8a/6ejIQZp3I-c.jpg', 'width': 807, 'height': 576}, {'type': 'z', 'url': 'https://pp.userapi.com/c628120/v628120161/3ed8b/68e1YKW9QCg.jpg', 'width': 1200, 'height': 857}], 'text': '', 'date': 1452073448, 'post_id': 18, 'access_key': 'e3b3b2824be18271aa'}}], 'post_source': {'type': 'api', 'platform': 'android'}, 'comments': {'count': 0, 'can_post': 1, 'groups_can_post': True}, 'likes': {'count': 0, 'user_likes': 0, 'can_like': 1, 'can_publish': 1}, 'reposts': {'count': 0, 'user_reposted': 0}}
]

нужно привести к удобочитаемому виду и подготовить данные к передаче в базу данных, для последующего анализа
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.09.2018, 11:37
Ответы с готовыми решениями:

Массив: Создать БД как список словарей, получив информацию из файла
Создать БД как список словарей, получив информацию из файла. Число полей(ключей) не менее 5. Реализовать отдельными функциями добавление,...

Список из словарей
Добрый день! Подскажите, пожалуйста, в чем ошибка при решении задачи? Разработчики поменяли формат выгрузки из базы данных товарных...

Список из словарей
как из этого списка словарей получить все url ? помогите пожалуйста Можно ли сделать через filter ?

66
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
29.09.2018, 23:34  [ТС]
Студворк — интернет-сервис помощи студентам
Кстати, для лучшего понимания вопроса по хранению данных в реляционных базах данных, можно почитать это: http://liberatum.ru/blog/mongodb

Кликните здесь для просмотра всего текста

На выходных сортировал свою библиотечку и надолго задержался на книге «MongoDB в действии». Кидать ее в раздел SQL было бы неправильно, так как Mongo — это как раз NoSQL, а создавать новый раздел из-за одной книги не хотелось. Я открыл книгу и стал листать. В конце предисловия была фраза, которая меня сначала насмешила, а потом заинтриговала: «Многие разработчики признавались, что при работе с ней [с Mongo] испытывают ощущения чуда и даже счастья». Я подумал, что и мне тоже чудо не помешает и уж тем более дополнительная порция счастья. И начал изучать, что же такое Mongo. Что же такое Mongo? Оказывается, это СУБД, которая в отличии от MySQL/SQLite/PostgreSQL и прочих SQL ориентирована на работу не с табличным представлением данных, а на работу с документами. Чтобы было понятнее, давайте сначала рассмотрим работу табличной СУБД на примере Либератума. Как хранятся данные в MySQL на примере работы Drupal Либератум работает на движке Drupal, который весьма интенсивно работает с MySQL. Для того, чтобы вы имели возможность увидеть произвольную web-страницу, Drupal проделывает следующее: 1. Из адреса страницы вычленяется виртуальный адрес и создается запрос к таблице url_alias, чтобы получить внутренний идентификатор материала (номер узла в терминологии Drupal). Например, пользователь запрашивает страницу http://liberatum.ru/exclusive/... hto-novogo. Тут же из адреса вычленятся необходимая для идентификации документа часть и делается запрос: SELECT src FROM url_alias WHERE dst='exclusive/windows-10-chto-novogo' Ответ будет таким: node/26254 2. Теперь по идентификатору узла (26254) можно извлечь заголовок статьи и идентификатор автора. Эти данные хранятся в таблице node: select title,uid from node where nid=26254 Ответ: title uid Что нового в Windows 10 1 В самой таблице node тело документа... отсутствует. Дело в том, что Drupal позволяет работать с ревизиями. То есть, каждая статья может иметь несколько версий. Поэтому для ревизий выделена отдельная таблица node_revision. В ней по идентификатору узла (nid) можно найти все версии данного документа и выбрать актуальную. Именно в этой таблице содержится тело документа и его анонс. Делаем еще один запрос: SELECT body,teaser,vid FROM node_revision WHERE nid=26254 Если получаем несколько копий, то выбираем последнюю. Думаете все, можно собрать и показать готовую страницу? Нет. Потребуется определить имя пользователя по его идентификатору (uid). Это запрос к таблице users. Потом нам потребуется найти все теги к статье. Это вообще отдельная история. Теги хуже всего вписываются в табличную модель представления данных, поэтому их хранение организовано через хитро закрученную жопу. Сейчас Билл Гейтс покажет вам как именно: Спасибо, Билл! Достаточно сказать, что для хранения тегов используется сразу 7 разных таблиц, а для их получения делаются запросы с объединением. Минус в том, что объединение таблиц — одна из самых медленных операций. Вот эти таблицы: term_data; term_hierarchy; term_node; term_relation; term_synonym; vocabulary; vocabulary_node_types. Хорошо, получили теги, но теперь-то всё? Опять нет. Нам нужно получить количество просмотров документа. Берется оно из таблицы node_counter (обновление этого значения пока не рассматриваем, но его нужно увеличивать каждый раз, когда пользователь запрашивает этот узел, а это еще один запрос). Потом нам надо из таблицы node_access проверить, а имеет ли вообще пользователь право просматривать этот документ. Всё? Опять нет! Комментарии. Для них есть отдельная таблица comments. Работать с комментариями на первый взгляд просто и тут видны достоинства табличного представления данных. Мы можем получить одним запросом сразу все комментарии к документу: SELECT cid,uid,comment FROM comments WHERE nid=26254 Получаем сами комментарии, идентификатор комментария (он нужен для ссылки) и идентификатор пользователя. Ой, постойте, как идентификатор пользователя? Неужели опять запросы к таблице users? А как же иначе получить не номер, а юзернэйм? А ведь помимо страницы с текстом есть еще боковые блоки с: новыми материалами; с самым читаемым; с последними комментариями; со статьями на похожие темы; и т.п. Даже переводы интерфейса хранятся в отдельной таблице. Нет, сразу в двух отдельных таблицах: locales_source и locales_target. Почему Drupal мертв Так как вы думаете, сколько всего MySQL приходится обработать запросов, чтобы предоставить данные для сборки всего одной страницы? От 300 до 1000 и больше. Да, с помощью хаков можно и нужно снизить количество запросов до минимума, но для этого нужно обладать глубокими знаниями Drupal и эту хакнутую копию движка потом будет очень трудно обновлять. Кто-то может сказать, что ничего страшного не происходит. Ведь СУБД на то и СУБД, чтобы трудиться. Какая разница, 5 запросов на страницу или 500? Для программиста это совершенно неважно. Для пользователя тоже — ну подождет на секунду или две дольше... И такая точка зрения имела право на существование, но только до одного очень важного момента — пока поисковики не стали считать время отдачи страницы одним из важнейших факторов ранжирования. Можно перефразировать это так: поисковик никогда не даст на сайт больше посетителей, чем сайт сможет обработать. Drupal всегда преподносился как CMS (система управления контентом), которая по максимуму использует возможности СУБД. Такой подход в сочетании с ориентированностью этих СУБД на работу с табличными данными привел к неприемлемым накладным расходам. Поэтому, выбирая Drupal вы либо негласно соглашаетесь с тем, что ваш сайт будет иметь непробиваемый потолок популярности, либо вы готовы к постоянным высоким тратам на высококлассных специалистов, либо у вас неограниченное количество денег на аппаратное обеспечение. В Drupal 8 нам обещают переход на ООП и следует полагать, что появится и ORM, который еще сильнее усугубит ситуацию. Можно ли испытывать в таких условиях ощущения чуда и даже счастья? Но что-то я увлекся похоронами любимой CMS. Наша задача не в том, чтобы поглубже закопать усопшего, а в том, чтобы показать, что табличная ориентированность не очень подходит для web-использования. Все же основа web — страница. Mongo — один запрос на страницу Разработчики Mongo выбрали другой подход. Вместо хранения кучи строк, раскиданных по разным таблицам, пользователь может сохранять, искать и извлекать документы целиком. Под документами подразумевается не ODF и даже не DOCX, а некие сущности на языке JSON. Например, на JSON можно описать документ, состоящий из заголовка, тела статьи, имени автора, туда же можно поместить теги и комментарии. Одна web-страница — один документ — один запрос. Конечно, так делать не рекомендуется, но теоретическая возможность есть. Другие приятные преимущества Mongo: нет таблиц — нет необходимости описывать схему базы данных; нет схемы базы данных — можно менять структуру документов как угодно и не предупреждать об этом СУБД; эта СУБД появилась относительно недавно и избавлена от старческих болезней MySQL/PostgreSQL и т.п. Например, Mongo изначально рассчитана на облачное применение и легко масштабируется как вертикально, так и горизонтально; и т.д. Работать с Mongo приятно. Вот примеры на Ruby: Подключение к базе: client = MongoClient.new Пароли, имена пользователей и т.п. не нужны, хотя при необходимости можно задать и их. Выбор базы данных: db = client.db("dbname") Выбор коллекции (совокупность документов одного типа): coll = db.collection("collectionName") Создание документа и помещение его в базу: doc = Hash.new doc["pid"] = 1 doc["title"] = "Заголовок статьи" doc["body"] = "Тело статьи" doc["path"] = "/path/to/page" coll.insert(doc) Извлечение документа по номеру статьи (pid): coll.find("pid" => 1) Следует отметить, что разработчики Mongo постарались сделать работу с базой максимально приятной для программистов. Например, зачем заставлять программиста создавать базу данных, если ее можно создать автоматически, когда появится запрос на подключение к ней. Или зачем заставлять программиста создавать коллекцию, если ее можно создать за него автоматически, сразу же, как только придет запрос на вставку новых данных в несуществующую ранее коллекцию. Программисту остается написать всего несколько строчек кода и можно отправляться пинать балду. В это время его коллеги, работающие с SQL-базами данных, будут вынуждены придумывать схемы размещения данных и постоянно актуализировать их с помощью миграций. А еще любители SQL должны насиловать свой мозг, изобретая хитрые многоэтажные объединения нескольких таблиц с помощью вложенных запросов и тормозных операций типа JOIN. Зачем все это? Программист, использующий Mongo напишет всего пару строк кода и пойдет в бухгалтерию за зарплатой. Все ли так прекрасно и где вообще тесты? В следующей части статьи о райском наслаждении от Mongo попытаемся сконвертировать базу данных Либератума из MySQL в MongoDB, запилим тестовый Либератум и сравним время генерации страниц. Чтобы было интереснее, для сравнения возьмем еще и SQLite.

Источник: http://liberatum.ru/blog/mongodb
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
29.09.2018, 23:41
у тебя есть вложенные словари/списки, это структура типа дерево. в sql таблицу это непросто загнать
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
29.09.2018, 23:57  [ТС]
Следует отметить, что разработчики Mongo постарались сделать работу с базой максимально приятной для программистов. Например, зачем заставлять программиста создавать базу данных, если ее можно создать автоматически, когда появится запрос на подключение к ней. Или зачем заставлять программиста создавать коллекцию, если ее можно создать за него автоматически, сразу же, как только придет запрос на вставку новых данных в несуществующую ранее коллекцию. Программисту остается написать всего несколько строчек кода и можно отправляться пинать балду. В это время его коллеги, работающие с SQL-базами данных, будут вынуждены придумывать схемы размещения данных и постоянно актуализировать их с помощью миграций. А еще любители SQL должны насиловать свой мозг, изобретая хитрые многоэтажные объединения нескольких таблиц с помощью вложенных запросов и тормозных операций типа JOIN. Зачем все это? Программист, использующий Mongo напишет всего пару строк кода и пойдет в бухгалтерию за зарплатой.

Источник: http://liberatum.ru/blog/mongodb

Добавлено через 40 секунд
* * *

vic5710, да, я это понимаю, именно это, меня и выбивает из колеи...

Добавлено через 6 минут
в чем я уже неоднократно убедился... MySQL уделывает всех на небольших наборах данных (до 50 тыс. записей в таблице). Потом на сцену выходит Postgres. Ну а для гигантских объемов слабоструктурированных данных по вашему совету, да и в сети рекомендуют: лучше подходит MongoDB. Только должно быть несколько выделенных под одну Монгу сервера, иначе профит будет незаметен.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
30.09.2018, 00:15
Цитата Сообщение от IRIP Посмотреть сообщение
Программист, использующий Mongo напишет всего пару строк кода и пойдет в бухгалтерию за зарплатой.
Прочитал следующие статьи, не дошел

Но вообще, нужно, конечно, попробовать с mongo, тем более особой обработки в базе данных не делается
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.09.2018, 01:59  [ТС]
vic5710, из всего этого, после анализа написанного, меня волнуют еще несколько вопросов:

1. Ассинхронность и неблокируемость при обработке запросов

2. Борьба с дублированием данных (чтобы собирать только обновления) и избегать дублей одной записи (с этим уже столкнулся)

3. Инвалидация сохраненных данных и параллельное добавление новых. В случае MongoDB это кеш, без долговременного согласованного хранилища, но в моем случае - хранилище есть. По-этому, третий вопрос, как-бы зависает =)

Добавлено через 1 час 25 минут
ТабуретY, да, я тоже пришел, после прочтения этого материала: https://habr.com/post/231213/ к тому, что если не делается обработки данных, а лишь "складирование", то целесообразно использовать именно mongodb, лить в нее со всех источников...

а после, использовать export, для пуляния данных по запросам в постоянную базу.

Выходит, теперь, нужно понять, как не допустить дублей в json и при записи в базу
и как потом доливать только новое
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
30.09.2018, 08:11
1. aiohttp сейчас в тренде
2. например по ключу date, это надо смотреть конкретную структуру
Python
1
2
3
4
5
6
7
8
import pymongo
 
client = pymongo.MongoClient()
db = client['test']
coll = db['records']
cursor = coll.find().sort('date')
for i in cursor:
    print(i['id'],i['date'])
3. не понял. запускаешь mongod на локалхосте и все пишется на диск
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.09.2018, 08:43  [ТС]
Цитата Сообщение от vic5710 Посмотреть сообщение
ну ты же json получаешь, вот и пиши в монго
для твоего случая

conn = pymongo.MongoClient()
db = conn.test
db['records'].drop()
coll = db['records']
for i in l:
* * coll.insert_one(i)
for i in coll.find():
* * print(i['text'])

а как потом извлекать, например, по owner_id и date
ведь date нужно сконвертировать? Или нет?

Добавлено через 18 минут
* * *

и нужно проверять, или как-то отслеживать, есть ли, в основной базе этот материал (перед экспортом) или нет
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
30.09.2018, 08:44
ты почитай про монгу, там много инструментов для поиска/сортировки
походу у тебя time.ctime для даты используется
https://metanit.com/nosql/mongodb/2.4.php
Python
1
2
3
4
5
6
7
8
9
import pymongo
from time import ctime
 
client = pymongo.MongoClient()
db = client['test']
coll = db['records']
cursor = coll.find().sort('date')
for i in cursor:
    print(i['id'],i['date'],ctime(i['date']))
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.09.2018, 12:37  [ТС]
vic5710, вот, по примеру файла sqlite_core начал делать https://github.com/IRIP/postov... go_core.py

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#coding: utf-8
import pymongo
 
 
l = []  # posts = vk.get_info(int(id))
conn = pymongo.MongoClient()
db = conn.test
db['records'].drop()
coll = db['records']
for i in l:
    coll.insert_one(i)
 
for i in coll.find():
    print(i['text'])
в нашем случае, вместо L мы должны передавать posts

файл для работы с базой вынес в отдельный bases и пока застрал =)

Добавлено через 9 минут
и вот этот код нужно тоже переписать под новую функцию

Python
1
2
3
4
5
6
7
8
9
10
if to_dos == 1:
                bases = sqlite_base(name_db)
                data = [
                        (
                            posts[i]['id'],
                            posts[i]['date'],
                            posts[i]['text']) for i in range(len(posts)
                        )
                    ]
                bases.save(data)
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
30.09.2018, 13:09
ну и в чем траблы? создаешь sqlite с полями id,date,text и инсертишь из запроса
джанга до добра не доведет, я тебе говорил
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
import pymongo
from time import ctime
import sqlite3
 
conn = sqlite3.connect('test.db')
cur = conn.cursor()
cur.execute('drop table if exists test')
cur.execute('create table test(id text,data text,txt text);')
 
client = pymongo.MongoClient()
db = client['test']
coll = db['records']
cursor = coll.find().sort('date',pymongo.DESCENDING)
for i in cursor:
    _id = i['id']
    _date = ctime(i['date'])
    _txt = i['text']
    cur.execute('insert into test values(?,?,?)',(_id,_date,_txt,))
 
cur.execute("select * from test")
for i in cur.fetchall(): print(i)
Добавлено через 10 минут
из реквеста ты получаешь json - комбинация словарь/список, в монге исходная единица - словарь. ты привел пример списка словарей, его надо вставлять в БД поэлементно. если получаешь словарь - можно вставлять как есть
1
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.09.2018, 13:20  [ТС]
vic5710, да то уже не django ... пока не до нее... каркас проекта написан еще в апреле, теперь работа ведется над сбором, классификацией и обработкой данных

вот как раз это все ...

Меня "поля" выбешивают... или нужно как-то умудриться из vk_api выдирать фото, видео, файлы, текст, теги, дату, урл поста, дату и id (уникальные/универсальные для любого источника характеристики)

Добавлено через 1 минуту
Цитата Сообщение от vic5710 Посмотреть сообщение
из реквеста ты получаешь json - комбинация словарь/список, в монге исходная единица - словарь. ты привел пример списка словарей, его надо вставлять в БД поэлементно. если получаешь словарь - можно вставлять как есть
Все мне это говорят...
но я пока не дошел умом до этого... ведь вставлять нужно с проверкой на дубли, ведь вставлять нужно только от старых к свежим, ведь вставлять нужно только свежее...
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
30.09.2018, 14:16
в работе с БД лучше три дубля, чем потеря инфы
дубликаты удалить просто
Python
1
2
3
4
5
6
7
8
9
10
11
import sqlite3
 
conn = sqlite3.connect('test.db')
cur = conn.cursor()
 
cur.execute('select count() from test')
for i in cur.fetchall(): print(i) 
cur.execute("delete from test where rowid not in (select min(rowid) from test group by date)")
conn.commit()
cur.execute('select count() from test')
for i in cur.fetchall(): print(i)
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.09.2018, 14:43  [ТС]
vic5710, дубли могут возникать из-за обрывов связи и прочих факторов?
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
30.09.2018, 20:47
скорее нет чем да. при обрыве связи транзакция не пройдет, если ты имеешь в виду БД клиент-сервер.
а если парсишь инет - возможно всякое.
я делал так :
накопитель->промежуточная фильтрация->коммит в БД
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
30.09.2018, 22:52  [ТС]
vic5710, вот еще столкнулся. Оказывается mongo нужно ставить дополнительно в систему...
а sqlite уже стоит, по умолчанию, рядом с python

Добавлено через 15 минут
что-то мне кажется, что не уйти от варианта записи в sqlite =(
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
01.10.2018, 08:26
ты получаешь json с реквеста.
если ты знаешь его структуру, можешь сразу извлекать нужные значения и писать хоть в БД, хоть в текстовый файл.
если не знаешь - нужно анализировать json, у него формат может быть произвольный.
я так понял что у тебя проблемы с парсингом json. можешь использовать mongodb-compass для визуализации. в монге используется JS скрипты, в принципе можешь и без питона обойтись.
Миниатюры
Как распарсить список словарей?  
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
01.10.2018, 09:24  [ТС]
vic5710, вот я и не понимаю, как писать =(

В моем случае: https://github.com/IRIP/postov/blob/master/main.py

Python
1
2
3
4
5
6
7
8
9
10
            if to_dos == 1:
                bases = sqlite_base(name_db)
                data = [
                        (
                            posts[i]['id'],
                            posts[i]['date'],
                            posts[i]['text']) for i in range(len(posts)
                        )
                    ]
                bases.save(data)
в text пихается весь текст а нужно определить поля здесь https://github.com/IRIP/postov... te_core.py

и вкладывать из main.py - posts только выбранные данные.

какие, чуть ниже напишу
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
01.10.2018, 10:49
чот я не понимаю твоих страданий
1. анализ json
2. создание БД с нужными полями
3. получение JSON (posts) и запись в БД
Python
1
2
3
4
5
6
7
8
9
10
11
dbname = 'test.db'
tblname = 'test'
conn = sqlite3.connect(dbname)
cur = conn.cursor()
keys = ['id','date','text']
data = [(i[key] for key in keys) for i in posts]
sql = 'insert into '+ tblname +' ('+ ','.join(keys) + ') values(' + ','.join(['?']*len(keys)) +')'
#print (sql)
for i in data:
    cur.execute(sql,tuple(i))
conn.commit()
Добавлено через 13 минут
или так
Python
1
2
3
4
5
6
7
8
9
10
11
dbname = 'test.db'
tblname = 'test'
conn = sqlite3.connect(dbname)
cur = conn.cursor()
keys = ['id','date','text']
sql = 'insert into '+ tblname +' ('+ ','.join(keys) + ') values(' + ','.join(['?']*len(keys)) +')'
#print (sql)
for i in posts:
    values = tuple([i[key] for key in keys])
    cur.execute(sql,values)
conn.commit()
0
 Аватар для IRIP
514 / 146 / 28
Регистрация: 18.04.2015
Сообщений: 1,904
Записей в блоге: 16
01.10.2018, 10:54  [ТС]
ТЕКСТОВАЯ ТАБЛИЦА post table
post_id - текущий id для избежания дублей и ссылки на вложения

id - уникальный идентификатор записи, предназначенный для предотвращения повторной отправки одинаковой записи.
date - дата размещения сообщения
post_type
text

lat -
long (lng) - координаты
place_id

post_source - источник
profiles



АТТАЧИ - attachments table
post_id

photo — фотография;
video — видеозапись ;
audio — аудиозапись;
doc — документ;
page — wiki-страница;
note — заметка;
poll — опрос;
album — альбом;
market — товар;
market_album — подборка товаров;
audio_playlist — плейлист с аудио.
url

owner_id - ссылка на владельца (авторские права)



* * *
Чего еще не хватает? Каких полей?

Добавлено через 59 секунд
Цитата Сообщение от vic5710 Посмотреть сообщение
3. получение JSON (posts) и запись в БД
вот в этом проблема. Я не пойму, как из списка словарей выдирать нужные данные и вставлять в базу данных
0
964 / 719 / 276
Регистрация: 10.12.2016
Сообщений: 1,764
01.10.2018, 10:57
ну тогда пункт 1
как записывать по известным ключам я тебе описал
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
01.10.2018, 10:57

Список, состоящий из словарей
Добрый день! Есть программа по заданию. Вроде работает, но как-то коряво. Как можно улучшить и как провести тестирование функциий? ...

Список словарей. Групповая обработка
Дорогие друзья, подтолкните новичка в нужном направлении, пож-та! Работаю со списками словарей и делаю простые вещи, например: ...

Перевод нескольких списков в список словарей
Здравствуйте, подскажите, пожалуйста, каким образом можно перевести 3 списка с 4 элементами в каждом в список словарей, где ключами...

Удаление пустых словарей и список из структуры
Напишите программу, которая из JSON-структуры удаляет значения, являющиеся пустыми словарями ({}) или пустыми списками (), до тех пор, пока...

Не могу правильно отфильтровать список словарей
Я очень долго не мог понять условие - по-этому распишу ооочень подробно Дано 2 списка - список словарей и список с валидными ключами к...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
10 сукцессия. Питон код войны грибов и растений
anaschu 27.06.2026
import numpy as np class PlantAgent: def __init__(self, name, strategy, initial_biomass): self. name = name self. strategy = strategy # "greedy" (широколиственные) или. . .
сукцессия 9. Математика подлости: как растения предали грибных друзей
anaschu 27.06.2026
Статья 2. Глобальная фосфорная война: эволюционно-экономические механизмы распределения биомов Земли Введение: Экологический рынок как игра с нулевой суммой Традиционная экология долгое время. . .
сукцессия 8. Как я спорил с ИИ, которые - агенты растений и ненавистники грибов!
anaschu 27.06.2026
Статья 1. Хроники грибного восстания: как Сократов диалог разрушил академические догмы ИИ Введение: Синдром «цифрового учебника» Современные большие языковые модели (LLM) обладают колоссальным. . .
Главный вопрос моделирования сукцессии
anaschu 27.06.2026
главный вопрос. Если эктомикориза лучше добывает недоступный фосфор. И ее масса максимальна из всех. А широколиственный лес тоже имеет самую крутую биомассу. То почему не возникло их симбиоза? Это. . .
сукцессия 6. Питон реализация энилоджиковской модели, картинка про Центральную часть будущей модели
anaschu 26.06.2026
Етить. ИИ мне на основе моего старого файла R создал вот эту вот хмерь на пайтоне. Это уже новая модель, модель сукцессии грибной. потоки фосфора, азота. Углерода. 5 видов организмов. Я даже. . .
Как замкнутый ядерный цикл решит проблему недостатки фосфора? Био миграция фосфора со дна океана
anaschu 26.06.2026
Биологический лифт: Концепция подъема фосфора со дна океана с помощью ЗЯТЦ Предлагаю на обсуждение альтернативу тяжелому промышленному бурению океанического дна. Вместо сложной инженерии мы можем. . .
сукцессия 5
anaschu 26.06.2026
ПЛАН РАЗРАБОТКИ математической модели сукцессии микоризных систем Переход AM → EcM (Endo + ErM) · Шумилов А. С. · ИФХиБПП РАН · Пущино · 2026 . . .
сукцессия 4
anaschu 25.06.2026
Более детализированный план разработки План доработки модели динамики микоризных симбиозов (EcM с гистерезисом) Цель: Реализовать логику переключения между эрикоидным (ErM) и эктомикоризным. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru