Чтобы сделать это без каких-либо пакетов для установки (длинный однострочный :-)):
import itertools,statistics
a = dict(zip(sorted(set([i['index'] for i in lod])),[statistics.mean(int(item['value']) for item in group) for key, group in itertools.groupby(lod, key=lambda x: x['index'])]))
Сейчас:
print(a)
Возвращает:
{1: 2.5, 2: 4}
Если python 2:
import itertools
a = dict(zip(sorted(set([i['index'] for i in lod]),key=[i['index'] for i in lod].index),[sum(int(item['value']) for item in group)/len(int(item['value']) for item in group) for key, group in itertools.groupby(lod, key=lambda x: x['index'])]))
Объяснение:
получить упорядоченный список уникальных элементов, используя set
используйте itertools.groupby
для группировки, затем итерируйте по key
a group
, получите среднее значение, используя statistics
или sum
и len
все два вышеупомянутых примечания находятся в zip
(dict(zip(...))
)
Или, чтобы сделать код немного чище:
Python 3:
import itertools,statistics
unique_elements=sorted(set([i['index'] for i in lod]))
groups=statistics.mean(int(item['value']) for item in group) for key, group in itertools.groupby(lod, key=lambda x: x['index'])]
a = dict(zip(unique_elements,groups))
Python 2:
import itertools
unique=sorted(set([i['index'] for i in lod])
groups=[sum(int(item['value']) for item in group)/len(int(item['value']) for item in group) for key, group in itertools.groupby(lod, key=lambda x: x['index'])]
a = dict(unique,groups))