我有一个这样的清单。
data = [{
'category': 'software',
'code': 110,
'actual': '["5.1.4"]',
'opened': '2018-10-16T09:18:12Z',
'component_type': 'update',
'event': 'new update available',
'current_severity': 'info',
'details': '',
'expected': None,
'id': 10088862,
'component_name': 'Purity//FA'
},
{
'category': 'software',
'code': 67,
'actual': None,
'opened': '2018-10-18T01:14:45Z',
'component_type': 'host',
'event': 'misconfiguration',
'current_severity': 'critical',
'details': '',
'expected': None,
'id': 10088898,
'component_name': 'pudc-vm-001'
},
{
'category': 'array',
'code': 42,
'actual': None,
'opened': '2018-11-22T22:27:29Z',
'component_type': 'hardware',
'event': 'failure',
'current_severity': 'warning',
'details': '' ,
'expected': None,
'id': 10089121,
'component_name': 'ct1.eth15'
}]
我要对此进行迭代,并且仅获得category
,component_type
,event
和current_severity
。
我尝试了一个for循环,但是很显然它说太多值无法解包。
for k, v, b, n in data:
print(k, v, b, n) //do something
i本质上希望过滤的列表仅包含category
,component_type
,event
和current_severity
。这样我就可以使用相同的for循环获取我的四个键值对。
或者是否有更好的方法?请帮帮我。
注意:列表中的节不是固定的,它会不断变化,可能有三个以上的节。
答案 0 :(得分:3)
如果您知道当前字典列表中的每个字典都至少应包含要尝试提取其数据的键,则可以使用dict[key]
,但是出于安全考虑,我更喜欢使用{{1 }},例如以下示例:
dict.get(key, default value)
输出:
out = [
{
'category': elm.get('category'),
'component_type': elm.get('component_type'),
'event': elm.get('event'),
'current_severity': elm.get('current_severity')
} for elm in data
]
print(out)
有关何时应使用[{'category': 'software',
'component_type': 'update',
'current_severity': 'info',
'event': 'new update available'},
{'category': 'software',
'component_type': 'host',
'current_severity': 'critical',
'event': 'misconfiguration'},
{'category': 'array',
'component_type': 'hardware',
'current_severity': 'warning',
'event': 'failure'}]
而不是dict.get()
的更多信息,请参见此answer
答案 1 :(得分:2)
通过此操作,您将获得一个仅包含您感兴趣的键的新列表:
new_list = [{
'category': stanza['category'],
'component_type': stanza['component_type'],
'event': stanza['event'],
} for stanza in data]
答案 2 :(得分:1)
您有一个字典列表,对此进行迭代的简单方法是
category = [x['category'] for x in data]
打印类别键的值
['software', 'software', 'array']
对component_type
,event
和current_severity
进行同样的操作,您就很好了