Сопоставить и объединить 2 списка по условию
Мой скрипт выгружает из моей группы vk массив сообщений из темы с объявлениями в формате json с помощью vk api, чтобы удалять те, которые устарели по дате.
def vkresponse(topic, offset=1, count=100):
response = requests.get('https://api.vk.com/method/board.getComments',
params={
'access_token': token,
'v': version,
'group_id': domain,
'topic_id': topic,
'offset': offset,
'count': count,
'extended': 1
}
)
return response
data = vkresponse(topic).json()['response']['items']
Удаленные сообщения попадают в гугл таблицу, просто для логов. Появилось желание в одном из столбцов видеть имя автора объявления вместо vk id. Для этого добавил следующие строки:
data = vkresponse(topic)
data1 = data.json()['response']['items']
data2 = data.json()['response']['profiles']
data1 выглядит примерно так (убрал лишние ключи):
[{'id': 11111, 'from_id': 999999999, 'date': 1620713847, 'text': 'Объявление 1'}]
data2:
[{'first_name': 'Вася', 'id': 999999999, 'last_name': 'Пупкин', 'screen_name': 'id999999999'}]
Сначала сделал так:
for i in range(len(data1)):
out.append({**data1[i], **data2[i]})
Но оказалось, что длина data1 не совпадает с data2, т.к. data2 содержит только уникальные id пользователей, если кто-то разместил больше одного сообщения, то в data2 он будет упоминаться только один раз. А также ключ id в data1 - это id сообщения, а в data2 - id пользователя. Необходимо, чтобы скрипт сопоставлял from_id из data1 с id из data2, чтобы в результате получилось это:
[{'id': 11111, 'from_id': 999999999, 'date': 1620713847, 'text': 'Объявление 1', 'first_name': 'Вася', 'last_name': 'Пупкин', 'screen_name': 'id999999999'}, {'id': 22222, 'from_id': 888888888, 'date': 1621321639, 'text': 'Объявление 2', 'first_name': 'Иван', 'last_name': 'Иванов', 'screen_name': 'id888888888'}]
Буду рад любой помощи или подсказкам, ибо в Python совсем новичок
Ответы (1 шт):
В общем, может и не очень изящно, но решил эту задачу так: заменил ключ id в data2 на from_id, как в data1. И сравнивая массивы по этому ключу, объединил строки.
for i in range(len(data2)):
data2[i]['from_id'] = data2[i].pop('id')
for i in range(len(data1)):
for j in range(len(data2)):
if data2[j]['from_id'] == data1[i]['from_id']:
out.append({**data1[i], **data2[j]})