Ошибка при добавлении нового ключа и значения в словарь
Создай функцию 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))
Ответы (3 шт):
Попробуйте вместо этого: new_dict[current_status].append(friends["username"])
Написать вот так: new_dict[current_status] = friends["username"]
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']}
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']}