Как вытащить максимальное значение по ключу в списке словарей?
Есть задача: Дан список словарей persons в формате
persons = [{"name": "Sam",
"age": 10},
{"name": "Jackky",
"age": 41},
{"name": "Mal",
"age": 12},
{"name": "Ray",
"age": 97}]
а) Напечатать имя самого молодого человека. Если возраст совпадает - напечатать все имена. б) Напечатать самое длинное имя. Если длина имени совпадает - напечатать все имена. в) Посчитать среднее количество лет всех людей из списка.
Подскажите, пожалуйста как правильно сделать эту задачу?
Пытался решить задание а следующим способом:
for element in persons:
age= element.get('age')
print(max(age))
Но программа выдает ошибку
Ответы (1 шт):
Автор решения: gil9red
→ Ссылка
Но программа выдает ошибку
Потому что max определяет максимум среди элементов коллекции, например у списков. А у вас в age будет число.
Объясняю алгоритм:
- Для
а)иб)суть похожа: группируем данные по ключу, после анализируем ключи и выводим результат. Тут удобно использовать словарь, где в значении будет список, т.к. возможно несколько результатов. Ва)ключом будет возраст, а дляб)- длина имён - Для
в)нужно просто посчитать сумму возрастов и разделить на количество. Для удобства храним их в списке, но можно и в двух переменных: для суммы и для количества
Пример:
from collections import defaultdict
persons = [
{"name": "Sam", "age": 10},
{"name": "Jackky", "age": 41},
{"name": "Mal", "age": 12},
{"name": "Ray", "age": 97}
]
age_by_names = defaultdict(list)
len_name_by_names = defaultdict(list)
ages = []
for p in persons:
name = p['name']
age = p['age']
age_by_names[age].append(name)
len_name_by_names[len(name)].append(name)
ages.append(age)
min_age = min(age_by_names)
print('min_age:', *age_by_names[min_age])
max_len_name = max(len_name_by_names)
print('max_len_name:', *len_name_by_names[max_len_name])
print('average:', sum(ages) // len(ages))