Python – how to use the dict() function with only a variable?

Question:

I have a variable called "dict_str" that looks like this : "a = 15, a2 = 19" (it continue for thousands of inputs).
If I try to use the dict() function :

dict(dict_str) 

it gives me this error :

ValueError: dictionary update sequence element #0 has length 1; 2 is required

But if I do this :

 dict(a = 15, a2 = 19)

it works fine.
So I am wondering if there’s a way to make it works with the dict_str variable

Asked By: univers

||

Answers:

This is a work around.

items = [item.split('=') for item in dict_str.split(', ')]

my_dict = {}
for key, value in items:
    my_dict[key.strip()] = int(value.strip())

print(my_dict)

If you prefer a dict comprehension you can use the bellow approach

items = [item.split('=') for item in dict_str.split(', ')]
my_dict = {key.strip(): int(value.strip()) for key, value in items}
print(my_dict)

{'a': 15, 'a2': 19}

You could even use regex depending on your use case.

Example:

import re

regex = re.compile(r'(w+) *= *(d+)') 
items = regex.findall(dict_str)
my_dict = {key: int(value) for key, value in items} 

print(my_dict) 

This regex should produce same output.

Answered By: Jamiu S.

One liner:

dmap = dict(map(str.strip, array.split("=")) for array in "a = 15, a2 = 19".split(","))

Decompressing it:

data = "a = 15, a2 = 19" 

dmap = dict(map(str.strip, array.split("=")) for array in data.split(","))

print(dmap)

Better approach:

data = "a = 15, a2 = 19"

dmap = {}

for value in data.split(","):
    array = value.split("=")
    dmap[array[0].strip()] = int(array[1].strip())
Answered By: devp
Categories: questions Tags:
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.