Преобразуйте age в число, оставьте пользователей строго старше 18 и запишите данные и агрегированную статистику в разные JSON-файлы. Для пустого результата определите значения статистики явно.
У вас есть список словарей с информацией о пользователях. Нужно:
Преобразуйте age в число, оставьте пользователей строго старше 18 и запишите данные и агрегированную статистику в разные JSON-файлы. Для пустого результата определите значения статистики явно.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
У вас есть список словарей с информацией о пользователях. Нужно:
- Отфильтровать пользователей старше 18 лет
- Сохранить отфильтрованные данные в один файл в формате JSON
- Создать и сохранить отдельный файл со статистикой по всем отфильтрованным пользователям:
- Общее количество пользователей
- Средний возраст (округлить до 1 знака после запятой)
- Минимальный и максимальный возраст
users_data = [ { "name": "Алексей", "age": "25", "birth_date": "[phone]", "city": "Москва" }, { "name": "Мария", "age": "17", "birth_date": "[phone]", "city": "Санкт-Петербург" }, { "name": "Иван", "age": "30", "birth_date": "[phone]", "city": "Москва" }, { "name": "Елена", "age": "22", "birth_date": "[phone]", "city": "Новосибирск" }, { "name": "Елисей", "age": "9", "birth_date": "[phone]", "city": "..." } ]
Ответ
Преобразуйте age в число, оставьте пользователей строго старше 18 и запишите данные и агрегированную статистику в разные JSON-файлы. Для пустого результата определите значения статистики явно.
import json
def export_users(users, data_path, stats_path):
selected = []
for user in users:
age = int(user['age'])
if age > 18:
selected.append({**user, 'age': age})
ages = [user['age'] for user in selected]
stats = {
'count': len(ages),
'average_age': round(sum(ages) / len(ages), 1) if ages else None,
'min_age': min(ages) if ages else None,
'max_age': max(ages) if ages else None,
}
for path, value in ((data_path, selected), (stats_path, stats)):
with open(path, 'w', encoding='utf-8') as file:
json.dump(value, file, ensure_ascii=False, indent=2)
Для примера: 3 пользователя, средний возраст 25,7, минимум 22, максимум 30. Невалидный age даст ошибку; политику пропуска задают отдельно. Пути должны быть разными и согласованными: режим w перезаписывает файлы.