Terry Jia
Terry Jia

Reputation: 13

How to convert list of list to list of objects in python?

I am using python 3.7. I have an array of arrays:

[[1,2,3,4],[5,6,7,8],[9,10,11,12]]

How can I make it become an array of objects?

[
{
name:1,
surname:2,
price:3,
location:4
},
{
name:5,
surname:6,
price:7,
location:8
},
{
name:9,
surname:10,
price:11,
location:12
}
]

I tried to use

array=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
json_str = json.dumps(array)

but it does not work.

Upvotes: 0

Views: 3881

Answers (3)

Bharath Kumar
Bharath Kumar

Reputation: 971

input

a = ["AB", "corona"]
b = ["india",'openVINO']
c = ["korea"]
d = ["26", "10.mp3", "Nvidia.mp4"]
e = ["washington DC",6]
f = ['swiss']

import itertools

lst = [a,b,c,d,e,f]
# print(lst)
lsts = list(itertools.product(*lst))
for lst in lsts:
  print('\n')
  for con in lst:
    print(con)

output

AB
india
korea
26
washington DC
swiss


AB
india
korea
26
6
swiss


AB
india
korea
10.mp3
washington DC
swiss


AB
india
korea
10.mp3
6
swiss


AB
india
korea
Nvidia.mp4
washington DC
swiss


AB
india
korea
Nvidia.mp4
6
swiss


AB
openVINO
korea
26
washington DC
swiss


AB
openVINO
korea
26
6
swiss


AB
openVINO
korea
10.mp3
washington DC
swiss


AB
openVINO
korea
10.mp3
6
swiss


AB
openVINO
korea
Nvidia.mp4
washington DC
swiss


AB
openVINO
korea
Nvidia.mp4
6
swiss


corona
india
korea
26
washington DC
swiss


corona
india
korea
26
6
swiss


corona
india
korea
10.mp3
washington DC
swiss


corona
india
korea
10.mp3
6
swiss


corona
india
korea
Nvidia.mp4
washington DC
swiss


corona
india
korea
Nvidia.mp4
6
swiss


corona
openVINO
korea
26
washington DC
swiss


corona
openVINO
korea
26
6
swiss


corona
openVINO
korea
10.mp3
washington DC
swiss


corona
openVINO
korea
10.mp3
6
swiss


corona
openVINO
korea
Nvidia.mp4
washington DC
swiss


corona
openVINO
korea
Nvidia.mp4
6
swiss

Upvotes: 0

RoadRunner
RoadRunner

Reputation: 26315

If we read the documentation of json.dumps:

Serialize obj to a JSON formatted str using this conversion table.

Which is not what we want. We want to transform your list of lists to a list of dictionaries, where the keys ['name', 'surname', 'price', 'location'] are zipped with each sub list.

An easy solution would be to use zip() inside a list comprehension:

lst =  [[1,2,3,4],[5,6,7,8],[9,10,11,12]] 

keys = ['name', 'surname', 'price', 'location']

print([dict(zip(keys, sublst)) for sublst in lst])

Output:

[{'name': 1, 'surname': 2, 'price': 3, 'location': 4}, {'name': 5, 'surname': 6, 'price': 7, 'location': 8}, {'name': 9, 'surname': 10, 'price': 11, 'location': 12}]

Note: This assumes the zipped lists are of equal length. Otherwise we can use itertools.zip_longest to zip uneven length lists.

Upvotes: 4

emiljoj
emiljoj

Reputation: 409

Judging from the output you have given as an example, I am guessing that you are looking to create a list of dictionaries. Following script should grant your the output saved as new_list

array=[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
new_list = []
for element in array:
    temp_dict = {}
    for x in element:
        if element.index(x) == 0:
            temp_str = 'name'
        elif element.index(x) == 1:
            temp_str = 'surname'
        elif element.index(x) == 2:
            temp_str = 'price'
        elif element.index(x) == 3:
            temp_str = 'location'
        temp_dict[temp_str] = x
    new_list.append(temp_dict)
print(new_list)

Upvotes: -1

Related Questions