Reputation: 2866
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?
Upvotes: 20
Views: 34312
Reputation: 8400
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]:
Upvotes: 7
Reputation: 15377
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}
Upvotes: 14
Reputation: 19284
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'}
Upvotes: 1
Reputation: 5672
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}
Upvotes: 2
Reputation: 27624
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)
{' Failures': 0, 'Tests run': 1, ' Errors': 0}
Upvotes: 4
Reputation: 122348
>>> 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}
Upvotes: 1
Reputation: 7891
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.
Upvotes: 2