Ошибка при добавлении нового ключа и значения в словарь

Рейтинг: -1Ответов: 3Опубликовано: 24.01.2023

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

Если в чате нет активных юзеров то результат такой:{"offline": ["Lucy"], "away": ["Bob"]}

Если друзей вообще нет в чате то тогда тогда в функцию передается пустой список , и функция должна вернуть пустой список.

Написал функцию, но она выдает ошибку KeyError: 'away'

def who_is_online(friends: list) -> dict:
    new_dict = {}
    for dictinary in friends:
        current_status = dictinary["status"]
        if current_status == "online" and dictinary["lastActivity"] > 10:
            current_status = "away"
            if current_status not in new_dict:
                new_dict[current_status].append(friends["username"])
    return new_dict

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

print(who_is_online(friends))

Ответы

▲ 0Принят
from typing import Dict


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


def effective_status(data: dict):
    if data.get('status') == 'online' and data.get('lastActivity') > 10:
        data['status'] = 'away'
    return data

def who_is_online(user_list: list):
    users: Dict[str, list] = dict()
    for elem in map(effective_status, user_list):
        users[
            elem.get('status')
        ] = users.get(
        elem.get('status'), []
        ) + [
            elem.get('username')
        ]
    return users

print(
    who_is_online(
        friends
    )
)

{'online': ['Alice'], 'offline': ['Lucy'], 'away': ['Bob']}
▲ 0

Попробуйте вместо этого: new_dict[current_status].append(friends["username"])

Написать вот так: new_dict[current_status] = friends["username"]

▲ -1
def who_is_online(friends: list) -> dict:
    if len(friends) > 0:
        print ("Список не пуст")
        new_dict = {}
        for line in friends:

            if line["status"] == "online":
                if line["lastActivity"] > 10:
                    current_status = "away"
                    new_dict[f'{current_status}'] = s=[f'{line["username"]}']
                else:
                    new_dict[f'{line["status"]}'] = s=[f'{line["username"]}']
            else:
                new_dict[f'{line["status"]}'] = s=[f'{line["username"]}']

        return new_dict
    else:
        print(" Список пуст")
        return []

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

print(who_is_online(friends))

Вывод:

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