[英]Create an array of items pulled from an 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}]
此数据可包含任意数量的条目。 我想要做的是将所有sname
值拉出到这样的列表中:
snames = ['sig1','sig2','sig3','sig4']
如何在不事先知道其长度的情况下迭代输出?
您可以使用列表推导来执行此操作:
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']
您可以使用列表理解。
同
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}]
您可以通过以下方式获取所有'sname'
条目:
my_list = [x['sname'] for x in my_dict_list]
和
print(my_list)
版画
['sig1', 'sig2', 'sig3', 'sig4']
最短和最pythonic是使用列表理解:
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']
最好验证'sname'是否在你的dict中,否则你可能会得到一个KeyError
除非你确定它们的一致性(在这种情况下你可以摆脱if 'sname' in i
中的if 'sname' in i
)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.