1

The data

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

needed result is to create a dictionary that looks like that:

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

My attempt is:

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

which does every possible combination from each corresponding array which is wrong.

[{'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'}]

the solution should work iteratively and can work with larger datasets

user14305909
  • 25
  • 1
  • 6
  • the second block of code that says "needed result" – user14305909 Sep 19 '20 at 14:35
  • `for ((class1,class2),(text1,text2)) in zip(class_data,data): print(f'{{class:{class1},text:{text1}}}'); print(f'{{class:{class2},text:{text2}}}'); print('***')` – wwii Sep 19 '20 at 14:59

2 Answers2

1

How about this:

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

Output:

[[{'text': 'dog.txt', 'class': 'class3'},
  {'text': 'cat.txt', 'class': 'class5'}],
 [{'text': 'mouse.txt', 'class': 'claas1'},
  {'text': 'horse.txt', 'class': 'class9'}]]
Andy
  • 919
  • 2
  • 9
  • 22
0

if you want to iterate correspondly on 1 (or more) different data structures, I would recommend using zip, to retrieve them together. like this:

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)

output recieved:

[{'text': 'dog.txt', 'class': 'class3'}, {'text': 'cat.txt', 'class': 'class5'}, {'text': 'mouse.txt', 'class': 'class1'}, {'text': 'horse.txt', 'class': 'class9'}]
Yossi Levi
  • 1,258
  • 1
  • 4
  • 7