Нужна помощь в решении задачи Python

Создай функцию who_is_online, которая принимает список словарей friends и определяет кто из них online, offline или away. Если у юзера стоит статус online, но его не было в сети более 10 минут (lastActivity > 10), то можно считать, что его статус отныне away.

Пример входящих данных:

[{
  "username": "Alice",
  "status": "online",
  "lastActivity": 10
}, {
  "username": "Lucy",
  "status": "offline",
  "lastActivity": 22
}, {
  "username": "Bob",
  "status": "online",
  "lastActivity": 104
}]

Результат функции who_is_online:

{
  "online": ["Alice"],
  "offline": ["Lucy"],
  "away": ["Bob"]
}

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

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

Задачка лёгкая, тебе стоило еще немного подумать и пробовать различные варианты решения

def who_is_online(lst_friends: list[dict]) -> dict:
    # Создаем словарь, который позже будем возврощать
    result = {
        'online': [],
        'offline': [],
        'away': []
    }

    # Циклом проходимся по всем словарям в списке
    for friend in lst_friends:

        # Теперь сравниваем каждого друга с его статусом
        # И добавляем его в наш словарь result
        if friend['status'] == 'offline':
            result['offline'].append(friend['username'])
        elif friend['lastActivity'] > 10:
            result['away'].append(friend['username'])
        else:
            result['online'].append(friend['username'])

    # Возвращаем наш результат!
    return result
→ Ссылка
Автор решения: Точка Слэш
def who_is_online(friens: list[dict]):
    statuses = {'online': [], 'offline': [], 'away': []}  # Этот словарь будет выводом
    # Перебираем друзей и, исходя из данных, распределяем их по статусам
    for i in friens:
        if (stat := i['status']) == 'offline' or i['status'] == 'away':
            statuses[stat].append(i['username'])
        elif i['lastActivity'] > 10:
            statuses['away'].append(i['username'])
        else:
            statuses['online'].append(i['username'])
    # Удаляем пустые значения
    toDelete = [i for i, j in statuses.items() if not j]
    for i in toDelete:
        del statuses[i]
    return statuses
→ Ссылка