Given List of dictionaries in String format, Convert into actual List of Dictionaries.
Input : test_str = [“[{‘Gfg’ : 3, ‘Best’ : 8}, {‘Gfg’ : 4, ‘Best’ : 8}]”]
Output : [[{‘Gfg’: 3, ‘Best’: 8}, {‘Gfg’: 4, ‘Best’: 8}]]
Explanation : String converted to list of dictionaries.Input : test_str = [“[{‘Gfg’ : 3, ‘Best’ : 8}]”]
Output : [[{‘Gfg’: 3, ‘Best’: 8}]]
Explanation : String converted to list of dictionaries.
Method #1: Using json.loads() + replace()
The combination of above functions can be used to solve this problem. In this, we replace the internal Strings using replace() and dictionary list is made using loads().
Python3
# Python3 code to demonstrate working of # Convert String to List of dictionaries # Using json.loads + replace() import json # initializing string test_str = [ "[{'Gfg' : 3, 'Best' : 8}, {'Gfg' : 4, 'Best' : 9}]" ] # printing original string print ( "The original string is : " + str (test_str)) # replace() used to replace strings # loads() used to convert res = [json.loads(idx.replace( "'" , '"')) for idx in test_str] # printing result print ( "Converted list of dictionaries : " + str (res)) |
The original string is : ["[{'Gfg' : 3, 'Best' : 8}, {'Gfg' : 4, 'Best' : 9}]"] Converted list of dictionaries : [[{'Gfg': 3, 'Best': 8}, {'Gfg': 4, 'Best': 9}]]
Method #2: Using eval()
This is one of the ways in which this task can be performed. The eval(), internally evaluates the data type and returns required result.
Python3
# Python3 code to demonstrate working of # Convert String to List of dictionaries # Using json.loads + replace() # initializing string test_str = "[{'Gfg' : 3, 'Best' : 8}, {'Gfg' : 9, 'Best' : 9}]" # printing original string print ( "The original string is : " + str (test_str)) # eval() used to convert res = list ( eval (test_str)) # printing result print ( "Converted list of dictionaries : " + str (res)) |
The original string is : [{'Gfg' : 3, 'Best' : 8}, {'Gfg' : 9, 'Best' : 9}] Converted list of dictionaries : [{'Gfg': 3, 'Best': 8}, {'Gfg': 9, 'Best': 9}]
Time Complexity: O(n)
Auxiliary Space: O(n)
Method #4: Using regular expression and literal_eval()
Use regular expressions and the ast.literal_eval() function. This method involves using a regular expression to match all the dictionary literals in the input string and then passing each matched string to ast.literal_eval() to convert it to a dictionary object.
Step-by-step approach:
- Import the necessary modules, re and ast.
- Initialize a test string with a list of dictionaries.
- Define a regular expression pattern to match dictionary literals.
- Find all matches of dictionary literals in the input string using re.findall() method.
- Use ast.literal_eval() to convert each matched string to a dictionary object.
- Replace all single quotes with double quotes in each matched string before evaluating them using ast.literal_eval().
- Store the resulting dictionary objects in a list using list comprehension.
- Print the list of dictionaries.
Below is the implementation of the above approach:
Python3
import re import ast # initializing string test_str = [ "[{'Gfg' : 3, 'Best' : 8}, {'Gfg' : 4, 'Best' : 9}]" ] # define regular expression pattern to match dictionary literals pattern = r "{[^{}]+}" # find all matches of dictionary literals in input string matches = re.findall(pattern, test_str[ 0 ]) # use ast.literal_eval() to convert each matched string to a dictionary object res = [ast.literal_eval(match.replace( "'" , '"')) for match in matches] # printing result print ( "Converted list of dictionaries: " , res) |
Converted list of dictionaries: [{'Gfg': 3, 'Best': 8}, {'Gfg': 4, 'Best': 9}]
Time complexity: The regular expression matching operation takes O(n) time where n is the length of the input string.
Auxiliary space: O(m) auxiliary space to store each matched string temporarily in memory during the evaluation process.