Трое друзей — Майк, Джон и Том — измеряли длину своих прыжков в сантиметрах. Мы сохранили результаты их прыжков в коде шаблона. Создайте словарь с именем avg_results, в котором имена будут храниться как ключи, а их средние длины прыжков — как значения.
jumps = [('Mike', 283), ('Mike', 317), ('Mike', 302), ('John', 305), ('John', 311), ('John', 297), ('John', 308), ('Tom', 341), ('Tom', 256)]
Я знаю только, как вычислить сумму мер для каждого из них, но я не знаю, как выполнить итерацию и получить счет каждого из них.
for jump in jumps:
name,length=jump
dict_results[name]=dict_results.get(name,0)+length
Вы пытались сгруппировать с collections.defaultdict(list)
, а затем взять среднее значение от деления sum()
на len()
:
from collections import defaultdict
jumps = [('Mike', 283), ('Mike', 317), ('Mike', 302), ('John', 305), ('John', 311), ('John', 297), ('John', 308), ('Tom', 341), ('Tom', 256)]
d = defaultdict(list)
for name, length in jumps:
d[name].append(length)
avg = {k: sum(v) / len(v) for k, v in d.items()}
print(avg)
# {'Mike': 300.6666666666667, 'John': 305.25, 'Tom': 298.5}
Вы также можете использовать statistics.mean()
, чтобы получить среднее значение:
from statistics import mean
avg = {k: mean(v) for k, v in d.items()}
print(avg)
# {'Mike': 300.6666666666667, 'John': 305.25, 'Tom': 298.5}
Можешь попробовать:
dict_results = {}
jumps = [('Mike', 283), ('Mike', 317), ('Mike', 302), ('John', 305), ('John', 311), ('John', 297), ('John', 308), ('Tom', 341), ('Tom', 256)]
for jump in jumps:
name, length = jump
if name in dict_results:
dict_results[name].append(length)
else:
dict_results[name] = [length]
for key, val in dict_results.items():
dict_results[key] = sum(val) / len(val)
print(dict_results)
Выход
{'Mike': 300.6666666666667, 'John': 305.25, 'Tom': 298.5}
Код:
jumps = [('Mike', 283), ('Mike', 317), ('Mike', 302), ('John', 305), ('John', 311), ('John', 297), ('John', 308), ('Tom', 341), ('Tom', 256)]
res = {}
for name, length in jumps:
res[name] = [length] if name not in res else res[name] + [length]
avg_results = {k: sum(v) / len(v) for k, v in res.items()}
Выход:
{'Mike': 300.6666666666667, 'John': 305.25, 'Tom': 298.5}
Ниже приведено одно из возможных решений с использованием словаря на основе ответа это.
dct = {}
for i, j in jumps:
group = dct.get(i, [])
group.append(j)
dct[i] = group
avg_results = {k:sum(v)/len(v) for k, v in dct.items()}
# {'Mike': 300.6666666666667, 'John': 305.25, 'Tom': 298.5}