从Python中的字典列表中提取键值对

时间:2014-06-15 03:13:41

标签: python

我有以下格式的字典存储在list.Below列出列表switch_ports的12个成员(字典)

[
{'type': 'port', 'number': 1, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:011', 'desc': 's1-eth1'},
{'type': 'port', 'number': 2, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:012', 'desc': 's1-eth2'},
{'type': 'port', 'number': 1, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:021', 'desc': 's2-eth1'},
{'type': 'port', 'number': 2, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:022', 'desc': 's2-eth2'},
{'type': 'port', 'number': 1, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:031', 'desc': 's3-eth1'},
{'type': 'port', 'number': 2, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:032', 'desc': 's3-eth2'},
{'type': 'port', 'number': 1, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:041', 'desc': 's4-eth1'},
{'type': 'port', 'number': 2, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:042', 'desc': 's4-eth2'},
{'type': 'port', 'number': 1, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:051', 'desc': 's5-eth1'},
{'type': 'port', 'number': 2, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:052', 'desc': 's5-eth2'},
{'type': 'port', 'number': 1, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:061', 'desc': 's6-eth1'},
{'type': 'port', 'number': 2, 'port_state': 1, 'state': 'active', 'port_id': '00:00:00:00:00:00:02:062', 'desc': 's6-eth2'}]

从列表switch_ports我想访问上面的port_id。我该怎么做?

如果我这样做

for port in switch_ports:
      print(port)

我得到与上面相同的输出。但是,如果我尝试访问下面的各个键值对。

for port in switch_ports:
      print(port[port_id])

如何从列表port_id

中获取00:00:00:00:00:00:02:062(例如switch_ports

2 个答案:

答案 0 :(得分:1)

你快到了。只需使用port_id作为字符串,就像这样

for port in switch_ports:
      print(port["port_id"])

如果你想收集所有port_id作为一个列表,那么使用像这样的列表理解

port_ids = [port["port_id"] for port in switch_ports]

Online Demo

答案 1 :(得分:1)

另一种方法是,使用itemgetter模块中的operator

>>> import operator
>>> operator.itemgetter('port_id')
<operator.itemgetter object at 0x7f318d7b8b90>
>>> port_id = operator.itemgetter('port_id')
>>> for port in switch_ports:
...     print port_id(port)
... 

打印:

00:00:00:00:00:00:02:011
00:00:00:00:00:00:02:012
00:00:00:00:00:00:02:021
00:00:00:00:00:00:02:022
00:00:00:00:00:00:02:031
00:00:00:00:00:00:02:032
00:00:00:00:00:00:02:041
00:00:00:00:00:00:02:042
00:00:00:00:00:00:02:051
00:00:00:00:00:00:02:052
00:00:00:00:00:00:02:061
00:00:00:00:00:00:02:062