Sarthak Pundir
Sarthak Pundir

Reputation: 81

The input is a list and the output is in the form of a nested dictionary in a list

Input:

input_list=['1.exe','2.exe','3.exe','4.exe']

Output format:

out_dict=[{'name':'1.exe',
           'children':[{'name':'2.exe',
                        'children':[{'name':'3.exe                                                                  
                                     'children':[{'name':'4.exe'}]}}}]

The input is the a list as above mentioned and we have to obtain the output in the format as mentioned in the above lines.

I tried using nested for loops but it isn't working. How can we implement JSON in this?

Upvotes: 0

Views: 63

Answers (1)

ncica
ncica

Reputation: 7206

input_list=['1.exe','2.exe','3.exe','4.exe']

def split(data):
    try:
        first_value = data[0]
        data = [{'name': first_value, 'children': split(data[1:])} if split(data[1:]) != [] else {'name': first_value}]
        return data
    except:
        return data

print (split(input_list))

output:

[{'name': '1.exe', 'children': 
        [{'name': '2.exe', 'children': 
                [{'name': '3.exe', 'children': 
                         [{'name': '4.exe'}]}]}]}]

code which is a little bit more easier to understand (with explinations):

input_list=['1.exe','2.exe','3.exe','4.exe']
def split(input_list):
  if len(input_list) == 0:
      return input_list # if there is no data return empty list
  else: # if we have elements
      first_value = input_list[0] # first value
      if split(input_list[1:]) != []: # data[1:] will return a list with all values except the first value
          input_list = [{'name':first_value ,'children': split(input_list[1:])}]
          return input_list  # return after the last recursion is called
      else:
          input_list = [{'name': first_value}]  
          return input_list

print (split(input_list))

output:

[{'name': '1.exe', 'children': 
        [{'name': '2.exe', 'children': 
                [{'name': '3.exe', 'children': 
                         [{'name': '4.exe'}]}]}]}]

or:

input_list=['1.exe','2.exe','3.exe','4.exe']

def split(input_list):
    if input_list:
        head, *tail = input_list  # This is a nicer way of doing head, tail = data[0], data[1:]
        if split(tail) != []:
            return [{'name': head, 'children':split(tail)}]
        else:
            return [{'name': head}]
    else:
        return {}

print (split(input_list))

Convert from Python to JSON:

import json

# a Python object (dict):
x = {
  "name": "John",
  "age": 30,
  "city": "New York"
}

# convert into JSON:
y = json.dumps(x)

# the result is a JSON string:
print(y)

JSON is a syntax for storing and exchanging data. Convert from Python to JSON If you have a Python object, you can convert it into a JSON string by using the json.dumps() method.

import json
input_list=['1.exe','2.exe','3.exe','4.exe']

def split(input_list):
    try:
        first_value = input_list[0]
        input_list = {'name': first_value, 'children': split(input_list[1:])} if split(input_list[1:]) != [] else {'name': first_value}
        return input_list
    except:
        return input_list

data = split(input_list)
print (json.dumps(data))

Upvotes: 1

Related Questions