Reputation: 45
I have some output data in this format:
[{'state': 'OK', 'sname': 'sig1', 'extra': None}, {'state': 'OFF', 'sname': 'sig2', 'extra': None}, {'state': 'OK', 'sname': 'sig3', 'extra': None}, {'state': 'UNKNOWN', 'sname': 'sig4', 'extra': None}]
This data can contain any number of entries. What I want to do is pull out all the sname
values into a list like this:
snames = ['sig1','sig2','sig3','sig4']
How can I iterate over the output without knowing its length in advance?
Upvotes: 3
Views: 63
Reputation: 1482
The shortest and most pythonic is to use a list comprehension :
data = [{'state': 'OK', 'sname': 'sig1', 'extra': None}, {'state': 'OFF', 'sname': 'sig2', 'extra': None}, {'state': 'OK', 'sname': 'sig3', 'extra': None}, {'state': 'UNKNOWN', 'sname': 'sig4', 'extra': None}]
snames = [i['sname'] for i in data if 'sname' in i]
print(snames)
>>> ['sig1', 'sig2', 'sig3', 'sig4']
It's better to verify that 'sname' is in your dict or you might get a KeyError
unless you are sure about their consistency (you could get rid of if 'sname' in i
in that case).
Upvotes: 2
Reputation: 7020
You can use list comprehension.
With
my_dict_list = [{'state': 'OK', 'sname': 'sig1', 'extra': None}, {'state': 'OFF', 'sname': 'sig2', 'extra': None}, {'state': 'OK', 'sname': 'sig3', 'extra': None}, {'state': 'UNKNOWN', 'sname': 'sig4', 'extra': None}]
You can get all 'sname'
entries via:
my_list = [x['sname'] for x in my_dict_list]
and
print(my_list)
prints
['sig1', 'sig2', 'sig3', 'sig4']
Upvotes: 2
Reputation: 76907
You can use a list comprehension to do this:
In [1]: array_of_dicts = [{'state': 'OK', 'sname': 'sig1', 'extra': None}, {'state': 'OFF', 'sname': 'sig2', 'extra': None}, {'state': 'OK', 'sname': 'sig3', 'extra': None}, {'state': 'UNKNOWN', 'sname': 'sig4', 'extra': None}]
In [2]: snames = [d['sname'] for d in array_of_dicts]
In [3]: print snames
['sig1', 'sig2', 'sig3', 'sig4']
Upvotes: 3