2011-07-20 1 views
3

Поэтому у меня есть большой набор данных, который выглядит, как этотнужно взять среднее значение длинного, как ни странно, отформатированный набор данных в Python

[('ART', [100, 234, 830, 304]), ('MATH', [600, 1400, 300, 340]), ('HISTORY', [2010, 300, 400, 600])] 

Как бы превратить это в набор данных, который я могу усреднить числа внутри, а затем сортировать? Я использую Python 2.7

+4

Является ли это строка символов, которые вы хотите, чтобы разобрать в структуру данных, с которой вы можете работать? Или вы считаете, что это действительно Python? (это близко, но не совсем) –

+0

Вы хотите закончить с помощью '[('ART', 359), ('MATH', 660), ('ИСТОРИЯ', 827)]'? –

+0

Под «Close, но не совсем» он означает, что он должен либо быть «(« A », [1, 2])», либо «{« A »: [1, 2]}». У вас либо есть dict с фигурными фигурными скобками и двоеточием, либо кортеж с круглыми скобками и запятой. – agf

ответ

6

для:

input = [('ART', [100, 234, 830, 304]), 
     ('MATH', [600, 1400, 300, 340]), 
     ('HISTORY', [2010, 300, 400, 600])] 

это:

print sorted(((k,sum(v)/len(v)) for k,v in input), key=lambda t: t[1]) 

печатает:

[('ART', 367), ('MATH', 660), ('HISTORY', 827)] 
+0

Замените 'input.iteritems()' только на 'input', и он работает с редактированием. – agf

+0

Python автоматически сортирует список кортежей по первым элементам в кортежах, затем по вторым элементам и т. Д., Поэтому вам не нужна лямбда. –

+0

Совершенно Pythonic, Dan. Приятно видеть. –

 Смежные вопросы

  • Нет связанных вопросов^_^