Home > Back-end >  From list to nested dictionary
From list to nested dictionary

Time:05-17

there are list :

data = ['man', 'man1', 'man2']
key = ['name', 'id', 'sal']
man_res = ['Alexandra', 'RST01', '$34,000']
man1_res = ['Santio', 'RST009', '$45,000']
man2_res = ['Rumbalski', 'RST50', '$78,000']

the expected output will be nested output:

Expected o/p:- {'man':{'name':'Alexandra', 'id':'RST01', 'sal':$34,000}, 
                    'man1':{'name':'Santio', 'id':'RST009', 'sal':$45,000}, 
                    'man2':{'name':'Rumbalski', 'id':'RST50', 'sal':$78,000}}

CodePudding user response:

Easy way would be using pandas dataframe

import pandas as pd

df = pd.DataFrame([man_res, man1_res, man2_res], index=data, columns=key)
print(df)
df.to_dict(orient='index')
           name      id      sal
man   Alexandra   RST01  $34,000
man1     Santio  RST009  $45,000
man2  Rumbalski   RST50  $78,000
{'man': {'name': 'Alexandra', 'id': 'RST01', 'sal': '$34,000'},
 'man1': {'name': 'Santio', 'id': 'RST009', 'sal': '$45,000'},
 'man2': {'name': 'Rumbalski', 'id': 'RST50', 'sal': '$78,000'}}

Or you could manually merge them using dict zip

d = dict(zip(
    data, 
    (dict(zip(key, res)) for res in (man_res, man1_res, man2_res))
))
d
{'man': {'name': 'Alexandra', 'id': 'RST01', 'sal': '$34,000'},
 'man1': {'name': 'Santio', 'id': 'RST009', 'sal': '$45,000'},
 'man2': {'name': 'Rumbalski', 'id': 'RST50', 'sal': '$78,000'}}

CodePudding user response:

#save it in 2D array
all_man_res = []
all_man_res.append(man_res)
all_man_res.append(man1_res)
all_man_res.append(man2_res)
print(all_man_res)

#Add it into a dict output
output = {}
for i in range(len(l)):
  person = l[i]
  details = {}
  for j in range(len(key)):
    value = key[j]
    details[value] = all_man_res[i][j]
  output[person] = details
output

CodePudding user response:

The pandas dataframe answer provided by NoThInG makes the most intuitive sense. If you are looking to use only the built in python tools, you can do

info_list = [dict(zip(key,man) for man in (man_res, man1_res, man2_res)]
output = dict(zip(data,info_list))
  • Related