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)

代码解析:

  1. 初始化 ret_data, msg_type, sn_list, msg_data 变量。
  2. 创建一个循环遍历 msg_data 中的每个数据项 item
  3. 从每个 item 中提取 coming_time, cpu_manage_usage, cpu_dp_avg_usage, cpu,并将其转换为浮点数类型,分别添加到对应列表中。
  4. cpu, coming_time, cpu_manage_usage, cpu_dp_avg_usage 分别赋值到 ret_data['data'][dsn] 中。
  5. 如果 msg_type_temp 是 'disk',则将 item 中的 'data_disk_usage' 添加到 ret_data['data'][dsn]['data_disk'] 中,并将 coming_time 赋值给 ret_data['data'][dsn]['data_disk_coming_time']
  6. 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,以确保代码正常运行。

优化建议:

  1. 为了提高代码的可读性和可维护性,可以将提取数据和赋值操作封装成函数,例如:
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)
    ...
  1. 可以使用列表推导式来简化代码,例如:
cpu_manage_usage = [float(item.get('cpu_manage_usage')) for item in msg_data]

通过以上优化建议,可以使代码更简洁、易于理解和维护。

希望本文对您有所帮助!

Python 代码优化:将 msg_data 数据格式处理为指定结构

原文地址: https://www.cveoy.top/t/topic/l3By 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录