仅从json中提取与好列匹配的值

2024-06-16 09:08:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在阅读python中的csv文件,提取包含json数据的列,并提取所需的键值对。所以我已经给出了好列的列表(比如说good_columns =[]),我想在我的列表中添加这个键的值到新的列表中(比如说data=[]),但是在json中有些键是我不想要的,根据我的好列列表,我想在我的数据列表中加零。 提前谢谢。你知道吗

good_columns = [
    "outboundrtp_roundTripTime",
    "outboundrtp_targetBitrate",
    "outboundrtp_bytesSent",
    "outboundrtp_packetsSent",
    "outboundrtp_packetsLost",
    "inboundrtp_inboundJitter" ,
    "inboundrtp_bytesReceived" ,
    "inboundrtp_packetsLost"
    ]

json内容:

{
"endpoint_AudioE2ELatency": 0,
"endpoint_VideoE2ELatency": 165,
"outboundrtp_roundTripTime": 0.340,
"outboundrtp_targetBitrate": 17586,
"outboundrtp_bytesSent": 8880,
"outboundrtp_packetsSent": 78,
"outboundrtp_packetsLost": 1,
"outboundrtp_remb": 0,
"inboundrtp_inboundJitter": 0.024,
"inboundrtp_bytesReceived": 24835,
"inboundrtp_packetsLost": 0,
"inboundrtp_remb": 0
}

{
"endpoint_AudioE2ELatency": 0,
"endpoint_VideoE2ELatency": 149,
"outboundrtp_roundTripTime": 0,
"outboundrtp_targetBitrate": 5616,
"outboundrtp_bytesSent": 37366,
"outboundrtp_packetsSent": 654,
"outboundrtp_packetsLost": 0,
"outboundrtp_remb": 0
}

我希望我的列表中包含值为0的键,而不是在好的列中。结果应该是: 对于第一个:
期望输出:

[0.340,17586,8880,78,1,0.024,24835,0]

电流输出:

[0,0,0.340,17586,8880,78,1,0]

对于第二个:
期望输出:

[0,5616,37366,654,0,0,0] 

电流输出:

[0,0,0,5616,37366,654,0]  

我尝试过的:

for key, value in record.items():
    if key in good_columns:
        data.append(value)
    elif key not in good_columns:
        data.append(0)

但这并没有达到预期的效果。你知道吗


Tags: columnskeyjson列表dataendpointgoodbytessent
2条回答
good_columns = [
    "outboundrtp_roundTripTime",
    "outboundrtp_targetBitrate",
    "outboundrtp_bytesSent",
    "outboundrtp_packetsSent",
    "outboundrtp_packetsLost",
    "inboundrtp_inboundJitter" ,
    "inboundrtp_bytesReceived" ,
    "inboundrtp_packetsLost"
    ]
json_data = [{
"endpoint_AudioE2ELatency": 0,
"endpoint_VideoE2ELatency": 165,
"outboundrtp_roundTripTime": 0.340,
"outboundrtp_targetBitrate": 17586,
"outboundrtp_bytesSent": 8880,
"outboundrtp_packetsSent": 78,
"outboundrtp_packetsLost": 1,
"outboundrtp_remb": 0,
"inboundrtp_inboundJitter": 0.024,
"inboundrtp_bytesReceived": 24835,
"inboundrtp_packetsLost": 0,
"inboundrtp_remb": 0
},{
"endpoint_AudioE2ELatency": 0,
"endpoint_VideoE2ELatency": 149,
"outboundrtp_roundTripTime": 0,
"outboundrtp_targetBitrate": 5616,
"outboundrtp_bytesSent": 37366,
"outboundrtp_packetsSent": 654,
"outboundrtp_packetsLost": 0,
"outboundrtp_remb": 0
}]

def get_val(json_dict, val):
    return json_dict.get(val,0)

for index, json_dict in enumerate(json_data,1):
    merge_keys = good_columns + list(json_dict.keys())
    order_keys = list(dict.fromkeys(merge_keys))
    data = [get_val(json_dict,val) for val in order_keys]
    print('{}.Dictionary data is {}'.format(index,data))

>>>1.Dictionary data is [0.34, 17586, 8880, 78, 1, 0.024, 24835, 0, 0, 165, 0, 0]
   2.Dictionary data is [0, 5616, 37366, 654, 0, 0, 0, 0, 0, 149, 0]

希望对你有帮助。你知道吗

试试这个:

# record = json.loads()

for key in good_columns:
    if(key not in record.keys()):
        record[key] = 0

相关问题 更多 >