簡體   English   中英

創建從一系列dicts中提取的項目數組?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM