2010-02-04 28 views

Trả lời

0

trả lời tại Numpy-discussion bởi Robert Kern


Bản sao kết email từ cuộc thảo luận rằng:

Làm thế nào để chuyển đổi các mảng lục NumPy dưới đây: REC = [('Bill', 31, 260.0), ('Fred', 15, 145.0)] r = rec.fromrecords (recs, names = 'name, age, weight', formats = 'S30, i2, f4') vào danh sách từ điển như: [{'name': 'Bill', 'age': 31, 'weight': 260.0}, 'name': 'Fred', 'age': 15, 'weight': 145,0}]

Giả sử rằng mảng hồ sơ của bạn là chỉ 1D:

Trong [6]: r.dtype.names Out [6]: ('tên', 'tuổi', 'trọng lượng')

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

trong [8]: [dict (zip (tên, ghi)) cho kỷ lục trong r] Out [8]: [{ 'tuổi' : 31, 'tên': 'Hóa đơn', 'cân nặng': 260 .0}, {'tuổi': 15, 'tên': 'Fred', 'trọng lượng': 145.0}]

+1

-1, các câu trả lời chỉ liên kết được khuyến khích mạnh mẽ trên SO. Nếu liên kết bị rots, thì câu trả lời này sẽ trở nên tồi tệ hơn không tồn tại: buồn bã. –

+0

Liên kết đã biến mất. Bản tóm tắt cuộc thảo luận sẽ tuyệt vời – Zee

+0

Liên kết không biến mất hoặc chỉ tạm thời biến mất. Câu trả lời bị bỏ qua, nhưng đã thêm bản sao của kết luận thảo luận trong câu trả lời này. Đó là giải pháp giống như câu trả lời của BẠN. – Evert

13

Tôi không chắc chắn có được xây dựng trong chức năng cho điều đó hay không, nhưng sau đây có thể làm công việc.

>>> [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

Có lẽ đáng để kéo 'r.dtype.names' ra một biến cục bộ. Có thể 'izip' nhanh hơn' zip' khi số lượng bản ghi tăng –

1

Điều này phụ thuộc vào cấu trúc cuối cùng được yêu cầu. Ví dụ này cho thấy một recarray numpy bao gồm một số tập con 1D. Thay vào đó, để có từ điển python, một chuyển đổi có thể là:

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} 
Các vấn đề liên quan