创建从一系列dicts中提取的项目数组?

时间:2015-02-26 16:13:52

标签: python arrays

我有一些这种格式的输出数据:

[{'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']

如何在不知道其长度的情况下迭代输出?

3 个答案:

答案 0 :(得分:3)

您可以使用列表推导来执行此操作:

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']

答案 1 :(得分:2)

您可以使用列表理解。

使用

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']

答案 2 :(得分:2)

最短和最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'在你的词典中或者你可能得到KeyError,除非你确定它们的一致性(在这种情况下你可以摆脱if 'sname' in i。)