Эффективный способ преобразования массива записей в список словаря - PullRequest
11 голосов
/ 05 февраля 2010

Как преобразовать массив пустых записей ниже:

recs = [('Bill', 31, 260.0), ('Fred', 15, 145.0)]
r = rec.fromrecords(recs, names='name, age, weight', formats='S30, i2, f4')

к списку словарей вроде:

[{'name': 'Bill', 'age': 31, 'weight': 260.0}, 
'name': 'Fred', 'age': 15, 'weight': 145.0}]

Ответы [ 3 ]

16 голосов
/ 05 февраля 2010

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

>>> [dict(zip(r.dtype.names,x)) for x  in r]
[{'age': 31, 'name': 'Bill', 'weight': 260.0}, 
{'age': 15, 'name': 'Fred', 'weight': 145.0}]
1 голос
/ 06 мая 2014

Это зависит от требуемой окончательной структуры. В этом примере показан пустой массив данных, состоящий из нескольких одномерных подмножеств. Чтобы иметь словарь Python вместо этого, возможное преобразование:

import numpy as np

a = np.rec.array([np.array([1,3,6]), np.array([3.4,4.2,-1.2])], names=['t', 'x'])

b = {name:a[name] for name in a.dtype.names}
0 голосов
/ 05 февраля 2010

Ответ на Numpy-обсуждение Робертом Керном


Копия итогового электронного письма из этого обсуждения:

Как преобразовать массив пустых записей ниже: recs = [(«Билл», 31, 260.0), («Фред», 15, 145.0)] r = rec.fromrecords (recs, names = 'имя, возраст, вес', форматы = 'S30, i2, f4') в список словаря, как: [{'name': 'Bill', 'age': 31, 'weight': 260.0}, 'name': 'Fred', 'age': 15, 'weight': 145.0}]

Предполагая, что ваш массив записей только 1D:

В [6]: r.dtype.names Out [6]: ('имя', 'возраст', 'вес')

В [7]: names = r.dtype.names

В [8]: [dict (zip (имена, запись)) для записи в r] Out [8]: [{'age': 31, «имя»: «Билл», «вес»: 260,0}, {«возраст»: 15, «имя»: «Фред», 'вес': 145.0}]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...