【发布时间】:2020-07-02 03:51:09
【问题描述】:
数据
我目前正在处理这样格式的非常大的 JSON 文件
{key: [1000+ * arrays of length 241],
key2: [1000+ * arrays of length 241],
(...repeat 5-8 times...)}
数据的结构方式是每个键的数组中的第 n 个元素属于第 n 个实体。将其视为每个键都是一个描述符,例如“高度”或“压力”。因此,要获取实体的“高度”和“压力”,您将访问所有数组中的实体索引 n。因此所有键的数组都是相同的长度Z
正如您可以想象的那样,这是一个整体工作的痛苦。因此,每当我执行任何数据操作时,我都会返回一个长度为 Z 的掩码数组,其中填充了 1 和 0。 1 表示要保留每个键中该索引中的数据,0 表示应省略)
问题
执行完所有数据操作后,我需要将掩码数组应用于数据以返回原始 JSON 数据的副本,但每个键的数组 Z 的长度等于掩码数组中 1 的数量(如果掩码数组中索引 n 处的元素为 0,则索引 n 中的元素将从所有 json 键的数组中删除,反之亦然)
我的尝试
# mask: masked array
# d: data to apply the mask to
def apply_mask(mask, d):
keys = d.keys()
print(keys)
rem = [] #List of index to remove
for i in range(len(mask)):
if mask[i] == 0:
rem.append(i) #Populate 'rem'
for k in keys:
d[k] = [elem for elem in d[k] if not d[k].index(elem) in rem]
return d
这按预期工作,但需要一段时间处理如此大的 JSON 数据
问题
我希望以上所有内容都清楚并帮助您理解我的问题:
是否有更优化/更快的方法将屏蔽数组应用于如上所示的数据?
干杯
【问题讨论】:
标签: python arrays json list performance