У вас есть список действий пользователей на платформе. Каждое действие представлено словарём с полями "user_id"
, "action"
, и "timestamp"
. Нужно реализовать функцию, которая определит, является ли пользователь "уникальным".
Уникальный пользователь — это тот, кто:
• совершал более 3 действий,
• все действия происходили в разные дни,
• не совершал одинаковые действия дважды.
Верните список
user_id
, соответствующих этому критерию.Решение задачи
from collections import defaultdict
from datetime import datetime
def find_unique_users(logs):
activity = defaultdict(lambda: {"actions": set(), "days": set(), "count": 0})
for log in logs:
user = log["user_id"]
action = log["action"]
date = datetime.fromisoformat(log["timestamp"]).date()
activity[user]["actions"].add(action)
activity[user]["days"].add(date)
activity[user]["count"] += 1
result = []
for user, data in activity.items():
if (
data["count"] > 3 and
len(data["days"]) == data["count"] and
len(data["actions"]) == data["count"]
):
result.append(user)
return result
# Пример использования
logs = [
{"user_id": 1, "action": "login", "timestamp": "2023-05-01T10:00:00"},
{"user_id": 1, "action": "view", "timestamp": "2023-05-02T11:00:00"},
{"user_id": 1, "action": "click", "timestamp": "2023-05-03T12:00:00"},
{"user_id": 1, "action": "logout", "timestamp": "2023-05-04T13:00:00"},
{"user_id": 2, "action": "login", "timestamp": "2023-05-01T10:00:00"},
{"user_id": 2, "action": "login", "timestamp": "2023-05-01T11:00:00"},
{"user_id": 2, "action": "click", "timestamp": "2023-05-01T12:00:00"},
]
print(find_unique_users(logs)) # Ожидаемый результат: [1]