创建一个由子数组和子列表项组成的字典

Create a dictionary consisting of items of subarrays and sublists

数据

import numpy as np
class_data=[np.array(['class3','class5']),np.array(['claas1','class9'])]
data=[['dog.txt','cat.txt'],['mouse.txt','horse.txt']]
 

需要的结果是创建一个如下所示的字典:

[[{'text': 'dog.txt', 'class': 'class3'},
  {'text': 'cat.txt', 'class': 'class5'}],
 [{'text': 'mouse.txt', 'class': 'class1'},
  {'text': 'horse.txt', 'class': 'class9'}]]

我的尝试是:

out_data=[]
for kk,kb in zip(class_data,data):
    for ii,kb2 in enumerate(kb):
        for i,v in enumerate(kk):
            out_data.append({'text': kb2, 'class': v})
            
out_data

它从每个相应的数组中进行了所有可能的组合,但这是错误的。

[{'text': 'dog.txt', 'class': 'class3'},
 {'text': 'dog.txt', 'class': 'class5'},
 {'text': 'cat.txt', 'class': 'class3'},
 {'text': 'cat.txt', 'class': 'class5'},
 {'text': 'mouse.txt', 'class': 'claas1'},
 {'text': 'mouse.txt', 'class': 'class9'},
 {'text': 'horse.txt', 'class': 'claas1'},
 {'text': 'horse.txt', 'class': 'class9'}]

该解决方案应该迭代工作并且可以处理更大的数据集

如果您想相应地迭代 1 个(或多个)不同的数据结构,我建议使用 zip,将它们一起检索。像这样:

import numpy as np
class_data=[np.array(['class3','class5']),np.array(['class1','class9'])]
data=[['dog.txt','cat.txt'],['mouse.txt','horse.txt']]

out_data=[]
for c_d, d_d in zip(class_data,data):
    for c_d_i, d_d_i in zip(c_d,d_d):
        out_data.append({"text": d_d_i, "class":c_d_i})
print(out_data)

收到输出:

[{'text': 'dog.txt', 'class': 'class3'}, {'text': 'cat.txt', 'class': 'class5'}, {'text': 'mouse.txt', 'class': 'class1'}, {'text': 'horse.txt', 'class': 'class9'}]

这个怎么样:

out_data=[]
for pairs in zip(data, class_data):
    temp_list = []
    for x in zip(pairs[0], pairs[1]):       
        temp_list.append({'text': x[0], 'class': x[1]})       
    out_data.append(temp_list)

out_data

输出:

[[{'text': 'dog.txt', 'class': 'class3'},
  {'text': 'cat.txt', 'class': 'class5'}],
 [{'text': 'mouse.txt', 'class': 'claas1'},
  {'text': 'horse.txt', 'class': 'class9'}]]