Saturday, November 16, 2024
Google search engine
HomeLanguagesPython – Convert key-value String to dictionary

Python – Convert key-value String to dictionary

Sometimes, while working with Python strings, we can have problems in which we need to convert a string’s key-value pairs to the dictionary. This can have applications in which we are working with string data that needs to be converted. Let’s discuss certain ways in which this task can be performed. 

Method #1 : Using map() + split() + loop 

The combination of above functionalities can be used to perform this task. In this, we perform the conversion of key-value pairs to the dictionary using a map, and splitting key-value pairs is done using split(). 

Python3




# Python3 code to demonstrate working of
# Convert key-value String to dictionary
# Using map() + split() + loop
 
# initializing string
test_str = 'gfg:1, is:2, best:3'
 
# printing original string
print("The original string is : " + str(test_str))
 
# Convert key-value String to dictionary
# Using map() + split() + loop
res = []
for sub in test_str.split(', '):
    if ':' in sub:
        res.append(map(str.strip, sub.split(':', 1)))
res = dict(res)
 
# printing result
print("The converted dictionary is : " + str(res))


Output : 

The original string is : gfg:1, is:2, best:3
The converted dictionary is : {'gfg': '1', 'is': '2', 'best': '3'}

Time complexity: O(n), where n is the length of the input string.
Auxiliary space: O(n), where n is the length of the input string.

Method #2 : Using dict() + generator expression + split() + map() 

This is yet another way in which this problem can be solved. In this, we perform the task in a similar way as above but in 1 liner way using dict() and generator expression. 

Python3




# Python3 code to demonstrate working of
# Convert key-value String to dictionary
# Using dict() + generator expression + split() + map()
 
# initializing string
test_str = 'gfg:1, is:2, best:3'
 
# printing original string
print("The original string is : " + str(test_str))
 
# Convert key-value String to dictionary
# Using dict() + generator expression + split() + map()
res = dict(map(str.strip, sub.split(':', 1))
           for sub in test_str.split(', ') if ':' in sub)
 
# printing result
print("The converted dictionary is : " + str(res))


Output : 

The original string is : gfg:1, is:2, best:3
The converted dictionary is : {'gfg': '1', 'is': '2', 'best': '3'}

The Time and Space Complexity for all the methods are the same:

Time Complexity: O(n)

Auxiliary Space: O(n)

Method #3: Using dict comprehension + split()  

This is yet another way in which this problem can be solved. In this, we perform the task in a similar way as above but in 1 liner way using dict comprehension and split(). 

Python




# Python3 code to demonstrate working of
# Convert key-value String to dictionary
# Using dict comprehension + split()
 
# initializing string
test_str = 'gfg:1, is:2, best:3'
 
# printing original string
print("The original string is : " + str(test_str))
 
# Convert key-value String to dictionary
# Using map() + split() + loop
res = test_str.split(', ')
res = {i.split(':')[0]: i.split(':')[1] for i in res}
 
# printing result
print("The converted dictionary is : " + str(res))


Output

The original string is : gfg:1, is:2, best:3
The converted dictionary is : {'is': '2', 'gfg': '1', 'best': '3'}

Method 4 :  using regular expressions

Step-by-step explanation:

  1. Define a regular expression pattern that matches each key-value pair: (\w+):(\d+)
    (\w+): match one or more word characters (letters, digits, or underscores), captured as a group
    :: match a colon
    (\d+): match one or more digits, captured as a group
  2. Use re.findall() to find all non-overlapping matches of the pattern in the input string.
  3. Use dict() to convert the list of matches into a dictionary.

Python3




import re
 
# initializing string
test_str = 'gfg:1, is:2, best:3'
 
# printing original string
print("The original string is : " + str(test_str))
 
# Convert key-value String to dictionary
# Using regular expressions
pattern = r'(\w+):(\d+)'
res = dict(re.findall(pattern, test_str))
 
# printing result
print("The converted dictionary is : " + str(res))


Output

The original string is : gfg:1, is:2, best:3
The converted dictionary is : {'gfg': '1', 'is': '2', 'best': '3'}

Time complexity:  O(n), where n is the length of the input string.

Auxiliary space complexity is O(n + k).

RELATED ARTICLES

Most Popular

Recent Comments