使用多个dicts和列表从dict中提取数据的最佳方法?

时间:2017-04-22 14:40:14

标签: python dictionary

我是一个新手,在谈到决定时似乎非常困难,特别是当他们似乎与另一个带有一系列词典的词典嵌套时。

我认为这就是我在这里处理的问题。

>>> print data
{u'service_group_stat': 
{u'status': 3, u'protocol': 2, u'name': u'SG_ACCOUNT.BUSINESS.COM_443', u'cur_reqs': 0, u'resp_pkts': 4349047684, u'cur_conns': 71, u'total_reqs': 0, u'total_reqs_succ': 0, u'req_pkts': 1808605274, u'req_bytes': 285168980113, 
u'member_stat_list': 
[{u'status': 1, u'resp_bytes': 10134966691, u'cur_reqs': 0, u'resp_pkts': 7834233, u'cur_conns': 11, u'total_reqs': 0, u'server': u'WWW0006', u'req_pkts': 3134918, u'req_bytes': 447460215, u'total_reqs_succ': 0, u'tot_conns': 52311, u'port': 81}, 
{u'status': 1, u'resp_bytes': 12396718148, u'cur_reqs': 0, u'resp_pkts': 9572363, u'cur_conns': 5, u'total_reqs': 0, u'server': u'WWW0005', u'req_pkts': 3870142, u'req_bytes': 548725475, u'total_reqs_succ': 0, u'tot_conns': 61464, u'port': 81}, 
{u'status': 1, u'resp_bytes': 15868605964, u'cur_reqs': 0, u'resp_pkts': 12282023, u'cur_conns': 15, u'total_reqs': 0, u'server': u'WWW0004', u'req_pkts': 5051483, u'req_bytes': 711362272, u'total_reqs_succ': 0, u'tot_conns': 80898, u'port': 81}, 
{u'status': 1, u'resp_bytes': 1832290858664, u'cur_reqs': 0, u'resp_pkts': 1417192127, u'cur_conns': 23, u'total_reqs': 0, u'server': u'WWW0003', u'req_pkts': 575717964, u'req_bytes': 92624447982, u'total_reqs_succ': 0, u'tot_conns': 7265009, u'port': 81}, 
{u'status': 1, u'resp_bytes': 1909851841929, u'cur_reqs': 0, u'resp_pkts': 1479318756, u'cur_conns': 14, u'total_reqs': 0, u'server': u'WWW0002', u'req_pkts': 634692796, u'req_bytes': 97240370978, u'total_reqs_succ': 0, u'tot_conns': 7130096, u'port': 81}, 
{u'status': 1, u'resp_bytes': 1839297678302, u'cur_reqs': 0, u'resp_pkts': 1422848182, u'cur_conns': 3, u'total_reqs': 0, u'server': u'WWW0001', u'req_pkts': 586137971, u'req_bytes': 93596613191, u'total_reqs_succ': 0, u'tot_conns': 7172117, u'port': 81}], 
u'resp_bytes': 5619840669698, u'tot_conns': 21761895}}

在我看来,“数据”是一个包含另一个dict的字典,其中包含多个dicts的列表?

我似乎能够完成基础知识并提取与“service_group_stat”相关的第一级数据,然后关联变量,例如:

>>> sgname = data['service_group_stat']['name']
>>> sgconnects = data['service_group_stat']['cur_conns']
>>> print sgname
SG_ACCOUNT.BUSINESS.COM_443
>>> print sgconnects
71

我没有弄清楚如何更深入地解决这个问题。

如何进入服务器级别并将数据关联到各个服务器。

最终能够呈现组数据以及服务器数据,例如:

Service Group:      SG_ACCOUNT.BUSINESS.COM_443     Total SG Connections:   71
Server:             WWW0001                         Server Connections:     3
Server:             WWW0002                         Server Connections:     14
Server:             WWW0003                         Server Connections:     23
Server:             WWW0004                         Server Connections:     15
Server:             WWW0005                         Server Connections:     5
Server:             WWW0006                         Server Connections:     11

有关如何最好地将数据分组并将数据与变量相关联的任何建议,然后我可以使用这些变量来显示或打印我认为合适的变量?

2 个答案:

答案 0 :(得分:2)

要在数据结构中进一步访问数据,您可以继续使用括号。因此,举例来说,让我们说您想要访问第一个'成员的状态。你可以这样做:

value = data['service_group_stat']['member_stat_list'][0]['status']

这是做什么的 - 它访问与密钥service_group_stat相关联的值,这恰好是一个字典。然后,它访问嵌套字典中的值,该字典恰好是一个列表。要从列表中获取,请使用索引(数字)。基本上,您可以根据数据结构的深度进一步堆叠括号。

答案 1 :(得分:2)

data使用pprint精确打印:

{'service_group_stat': {'cur_conns': 71,
                    'cur_reqs': 0,
                    'member_stat_list': [{'cur_conns': 11,
                                          'cur_reqs': 0,
                                          'port': 81,
                                          'req_bytes': 447460215,
                                          'req_pkts': 3134918,
                                          'resp_bytes': 10134966691,
                                          'resp_pkts': 7834233,
                                          'server': 'WWW0006',
                                          'status': 1,
                                          'tot_conns': 52311,
                                          'total_reqs': 0,
                                          'total_reqs_succ': 0},
                                         {'cur_conns': 5,
                                          'cur_reqs': 0,
                                          'port': 81,
                                          'req_bytes': 548725475,
                                          'req_pkts': 3870142,
                                          'resp_bytes': 12396718148,
                                          'resp_pkts': 9572363,
                                          'server': 'WWW0005',
                                          'status': 1,
                                          'tot_conns': 61464,
                                          'total_reqs': 0,
                                          'total_reqs_succ': 0},
                                         {'cur_conns': 15,
                                          'cur_reqs': 0,
                                          'port': 81,
                                          'req_bytes': 711362272,
                                          'req_pkts': 5051483,
                                          'resp_bytes': 15868605964,
                                          'resp_pkts': 12282023,
                                          'server': 'WWW0004',
                                          'status': 1,
                                          'tot_conns': 80898,
                                          'total_reqs': 0,
                                          'total_reqs_succ': 0},
                                         {'cur_conns': 23,
                                          'cur_reqs': 0,
                                          'port': 81,
                                          'req_bytes': 92624447982,
                                          'req_pkts': 575717964,
                                          'resp_bytes': 1832290858664,
                                          'resp_pkts': 1417192127,
                                          'server': 'WWW0003',
                                          'status': 1,
                                          'tot_conns': 7265009,
                                          'total_reqs': 0,
                                          'total_reqs_succ': 0},
                                         {'cur_conns': 14,
                                          'cur_reqs': 0,
                                          'port': 81,
                                          'req_bytes': 97240370978,
                                          'req_pkts': 634692796,
                                          'resp_bytes': 1909851841929,
                                          'resp_pkts': 1479318756,
                                          'server': 'WWW0002',
                                          'status': 1,
                                          'tot_conns': 7130096,
                                          'total_reqs': 0,
                                          'total_reqs_succ': 0},
                                         {'cur_conns': 3,
                                          'cur_reqs': 0,
                                          'port': 81,
                                          'req_bytes': 93596613191,
                                          'req_pkts': 586137971,
                                          'resp_bytes': 1839297678302,
                                          'resp_pkts': 1422848182,
                                          'server': 'WWW0001',
                                          'status': 1,
                                          'tot_conns': 7172117,
                                          'total_reqs': 0,
                                          'total_reqs_succ': 0}],
                    'name': 'SG_ACCOUNT.BUSINESS.COM_443',
                    'protocol': 2,
                    'req_bytes': 285168980113,
                    'req_pkts': 1808605274,
                    'resp_bytes': 5619840669698,
                    'resp_pkts': 4349047684,
                    'status': 3,
                    'tot_conns': 21761895,
                    'total_reqs': 0,
                    'total_reqs_succ': 0}}

使用此信息,我们现在可以处理它。 对于member_stat_list中的每个服务器,我们可以按您所说的格式打印数据:

for server in data["service_group_stat"][["member_stat_list"]:
    print("Server:".ljust(20," ")+server["server"].ljust(32," ")+"Server Connections:".ljust(24," ")+str(server["cur_conns"]))