python: доступ к нескольким значениям в части значения пары ключ: значение - PullRequest
0 голосов
/ 09 июля 2010

Я пытаюсь выполнить вычисление для нескольких значений в части значения списка пар ключ: значение.

Итак, у меня есть что-то вроде:
[(«яблоки», [«254», «234», «23», «33»]), («бананы», [«732», «28»]), («сквош», [«3» ])]

Я пытаюсь создать список значений y, которые являются средними значениями этих целых чисел выше.

Я пытаюсь написать следующий псевдокод
если элемент [1] содержит 0 элементов:
ys.append (пункт [1])
иначе, если элемент [1] содержит> 0 элементов:
сложить элементы, разделить на количество элементов
ys.append среднее число

Я не уверен, как это сделать, как получить доступ ко всем значениям, которые могут существовать в наборе значений каждого ключа.

Ответы [ 3 ]

2 голосов
/ 09 июля 2010

Где pairs - ваш список пар:

averages = [float(sum(values)) / len(values) for key, values in pairs]

выдаст вам список средних значений.

Если ваши числа являются строками, как в вашем примере, замените sum(values) выше на sum([int(i) for i in values]).

РЕДАКТИРОВАТЬ: И если вы предпочитаете словарь, то список средних:

averages = dict([(key, float(sum(values)) / len(values)) for key, values in pairs])
0 голосов
/ 09 июля 2010

Среднее значение списка можно найти по

sum(float(i) for i in lst) / len(lst)

Если бы элементы списка были целыми числами, вы могли бы сделать

float(sum(lst)) / len(lst)

но в вашем примере они являются строками, поэтому вы должны преобразовать их.

В этом случае я бы действительно рекомендовал использовать средство понимания списков в Python для автоматического создания списка средних. Если ваш первоначальный список пар называется, скажем, fruit_list (я знаю, что сквош - это не фрукт, поэтому подайте в суд на меня):

averages = [[] if len(values) == 0 else sum(float(i) for i in values)/len(values) for fruit, values in fruit_list]

Хотя это кажется немного странным, потому что тогда вы получите список, в котором некоторые элементы являются числами с плавающей запятой, а другие элементы являются пустыми списками. Вы уверены, что не хотели использовать, скажем, 0 вместо [], когда в item[1]?

нет значений?
0 голосов
/ 09 июля 2010
ys = []
for k, v in items:
    avg = sum(map(float, v))/len(v)
    ys.append(v)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...