Преобразуйте кортежи в списке в словарь и рассчитайте частоту

Трое друзей — Майк, Джон и Том — измеряли длину своих прыжков в сантиметрах. Мы сохранили результаты их прыжков в коде шаблона. Создайте словарь с именем 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
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
76
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Вы пытались сгруппировать с 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}

Другие вопросы по теме

Похожие вопросы