Python 代码优化:将 msg_data 数据格式处理为指定结构
Python 代码优化:将 msg_data 数据格式处理为指定结构
本文介绍如何使用 Python 代码将 msg_data 数据格式处理为 {'interval': u'1h', 'cpu_manage_usage':[10.0, 11.0, 11.0], 'cpu':[6.0,7.0,7.0], 'cpu_dp_avg_usage':[4.0,5.0,5.0], 'coming_time':['2023-09-13 00:00:17','2023-09-13 00:11:18','2023-09-13 00:14:18',]} 结构,并提供相应的代码示例。
ret_data = {'code':0, 'message':'success', 'data':{}}
msg_type = ['cpu','mem','disk']
sn_list = ['48443f16f16c9cede62efa44a821dfa00c4013f1']
msg_data = [{'cpu_manage_usage': u'10', 'cpu_dp_avg_usage': u'4', 'coming_time': '2023-09-13 00:00:17', 'cpu': u'6'}, {'cpu_manage_usage': u'11', 'cpu_dp_avg_usage': u'5', 'coming_time': '2023-09-13 00:11:18', 'cpu': u'7'}, {'cpu_manage_usage': u'11', 'cpu_dp_avg_usage': u'5', 'coming_time': '2023-09-13 00:14:18', 'cpu': u'7'}]
if dsn not in ret_data['data'].keys():
ret_data['data'][dsn] = {}
if msg_type_temp not in ret_data['data'][dsn].keys():
ret_data['data'][dsn][msg_type_temp] = []
ret_data['data'][dsn]['interval'] = ''
ret_data['data'][dsn]['data_disk'] = []
coming_time = []
cpu_manage_usage = []
cpu_dp_avg_usage = []
cpu = []
for item in msg_data:
coming_time.append(item.get('coming_time'))
cpu_manage_usage.append(float(item.get('cpu_manage_usage')))
cpu_dp_avg_usage.append(float(item.get('cpu_dp_avg_usage')))
cpu.append(float(item.get('cpu')))
ret_data['data'][dsn][msg_type_temp] = cpu
ret_data['data'][dsn]['{0}_coming_time'.format(msg_type_temp)] = coming_time
ret_data['data'][dsn]['cpu_manage_usage'] = cpu_manage_usage
ret_data['data'][dsn]['cpu_dp_avg_usage'] = cpu_dp_avg_usage
if msg_type_temp == 'disk':
ret_data['data'][dsn]['data_disk'].append(item.get('data_disk_usage'))
ret_data['data'][dsn]['data_disk_coming_time'] = coming_time
ret_data['data'][dsn]['interval'] = msg_type_data.get('interval',report_trans)
代码解析:
- 初始化
ret_data,msg_type,sn_list,msg_data变量。 - 创建一个循环遍历
msg_data中的每个数据项item。 - 从每个
item中提取coming_time,cpu_manage_usage,cpu_dp_avg_usage,cpu,并将其转换为浮点数类型,分别添加到对应列表中。 - 将
cpu,coming_time,cpu_manage_usage,cpu_dp_avg_usage分别赋值到ret_data['data'][dsn]中。 - 如果
msg_type_temp是 'disk',则将item中的 'data_disk_usage' 添加到ret_data['data'][dsn]['data_disk']中,并将coming_time赋值给ret_data['data'][dsn]['data_disk_coming_time']。 - 将
msg_type_data.get('interval',report_trans)赋值给ret_data['data'][dsn]['interval']。
运行结果:
最终 ret_data['data'][dsn] 会被更新为如下格式:
{'interval': u'1h', 'cpu_manage_usage':[10.0, 11.0, 11.0], 'cpu':[6.0,7.0,7.0], 'cpu_dp_avg_usage':[4.0,5.0,5.0], 'coming_time':['2023-09-13 00:00:17','2023-09-13 00:11:18','2023-09-13 00:14:18',]}
说明:
代码中使用了 item.get('key', 0) 获取 item 中对应键的值,如果键不存在则返回 0,以确保代码正常运行。
优化建议:
- 为了提高代码的可读性和可维护性,可以将提取数据和赋值操作封装成函数,例如:
def process_data(item, msg_type_temp):
coming_time = item.get('coming_time')
cpu_manage_usage = float(item.get('cpu_manage_usage'))
cpu_dp_avg_usage = float(item.get('cpu_dp_avg_usage'))
cpu = float(item.get('cpu'))
return coming_time, cpu_manage_usage, cpu_dp_avg_usage, cpu
# 在循环中调用函数
for item in msg_data:
coming_time, cpu_manage_usage, cpu_dp_avg_usage, cpu = process_data(item, msg_type_temp)
...
- 可以使用列表推导式来简化代码,例如:
cpu_manage_usage = [float(item.get('cpu_manage_usage')) for item in msg_data]
通过以上优化建议,可以使代码更简洁、易于理解和维护。
希望本文对您有所帮助!
原文地址: https://www.cveoy.top/t/topic/l3By 著作权归作者所有。请勿转载和采集!