I have a list
['Tests run: 1', ' Failures: 0', ' Errors: 0']
I would like to convert it to a dictionary as
{'Tests run': 1, 'Failures': 0, 'Errors': 0}
How do I do it?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Use:
a = ['Tests run: 1', ' Failures: 0', ' Errors: 0']
d = {}
for b in a:
i = b.split(': ')
d[i[0]] = i[1]
print d
returns:
{' Failures': '0', 'Tests run': '1', ' Errors': '0'}
If you want integers, change the assignment in:
d[i[0]] = int(i[1])
This will give:
{' Failures': 0, 'Tests run': 1, ' Errors': 0}
Method 2
Try this
In [35]: a = ['Tests run: 1', ' Failures: 0', ' Errors: 0']
In [36]: {i.split(':')[0]: int(i.split(':')[1]) for i in a}
Out[36]: {'Tests run': 1, ' Failures': 0, ' Errors': 0}
In [37]:
Method 3
a = ['Tests run: 1', ' Failures: 0', ' Errors: 0']
b = dict([i.split(': ') for i in a])
final = dict((k, int(v)) for k, v in b.items()) # or iteritems instead of items in Python 2
print(final)
Result
{' Failures': 0, 'Tests run': 1, ' Errors': 0}
Method 4
naive solution assuming you have a clean dataset:
intconv = lambda x: (x[0], int(x[1]))
dict(intconv(i.split(': ')) for i in your_list)
This assumes that you do not have duplicates and you don’t have other colons in there.
What happens is that you first split the strings into a tuple of two values. You do this here with a generator expression. You can pass this directly into the dict, since a dict knows how to handle an iterable yielding tuples of length 2.
Method 5
l = ['Tests run: 1', ' Failures: 0', ' Errors: 0']
d = dict([map(str.strip, i.split(':')) for i in l])
for key, value in d.items():
d[key] = int(value)
print(d)
output:
{'Tests run': 1, 'Errors': 0, 'Failures': 0}
Method 6
>>> s = ['Tests run: 1', ' Failures: 0', ' Errors: 0']
>>> {i.split(":")[0].strip():int(i.split(":")[1].strip()) for i in s}
{' Failures': 0, 'Tests run': 1, ' Errors': 0}
Method 7
Loop over your list, and split by the colon. Then assign the first value to the second value in a dict object:
x = ['Tests run: 1', ' Failures: 0', ' Errors: 0']
y = {}
for k in x:
c = k.split(':')
y[str(c[0]).replace(" ", "")] = str(c[-1]).replace(" ", "")
print(y)
#{'Failures': '0', 'Tests run': '1', 'Errors': '0'}
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0