我从多列的文本文件中读取数据集,每列的列对应一个字典键。这样,每个字典键对应于作为数组的值。我想基于每个索引为所有键实例化一个类实例。 下面的示例代码段可行,但我想知道是否有更好的方法来执行此操作(在速度方面更好,是pythonic等)。
首先我初始化一些样本数据。
import numpy as np
ts = np.array([0, 2, 6, 10])
ss = np.array([100, 90, 120, 130])
ns = np.array(['A', 'C', 'G', 'K'])
data = dict(time=ts, size=ss, name=ns)
print(data)
产生以下输出:
{'name': array(['A', 'C', 'G', 'K'],
dtype='<U1'), 'time': array([ 0, 2, 6, 10]), 'size': array([100, 90, 120, 130])}
然后我创建一个样本类并实例化任意数组的索引(因为它们都是相同的大小)。
class SampleProblem():
def __init__(self, time, size, name):
self.time = time
self.size = size
self.name = name
res = []
for idx in range(len(data['time'])):
res.append(SampleProblem(data['time'][idx], data['size'][idx], data['name'][idx]))
# not written as a list comprehension for readability purposes
for idx in range(len(res)):
print(res[idx].name)
产生以下输出:
A
C
G
K
答案 0 :(得分:1)
zip
是一种Pythonic替代品:
res = [SampleProblem(t, s, n) for t, s, n in \
zip(data['time'], data['size'], data['name'])]
可能更好的想法是在列表理解之前用zip
重新排列字典:
data = dict(enumerate(zip(ts, ss, ns)))
# {0: (0, 100, 'A'), 1: (2, 90, 'C'), 2: (6, 120, 'G'), 3: (10, 130, 'K')}
res = [SampleProblem(*args) for args in data.values()]