将JSON对象转换为类似键的JSON对象数组

2024-07-03 08:21:13 发布

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

嘿,我有输入作为JSON对象的列表

[ 
{ 
  ‘sr_number’:687485784,
        ‘IC_Prediction’:’NPU-Soldier-Fractures’,
        ’ IC_Probability’:0.80,'Signatures':'PLATFORM-MLP-2'
     },
     { 
        'sr_number’:687485784,
        ‘IC_Prediction’:’Hotswap-Controller,
        ’IC_Probability’:0.63,
        'Signatures' : 'PLATFORM-NLP-3'
     }
  },{},{},{} ]

我希望他们分组的基础上'sr\ u数'和愿望输出如下。你知道吗

[ { ‘sr_number’ : 687485784,‘recommedations’: 
[{‘IC_Prediction’:’NPU-Soldier-Fractures’,’IC_Probability’:0.80},
{‘IC_Prediction’:’Hotswap-Controller,’ IC_Probability’:0.63}
],
‘Signatures’: [ ‘PLATFORM-MLP-2’,’PLATFORM-NLP-3’]
},{},{}
]

我是python新手,所以不知道使用哪种数据结构以及如何完成它。任何帮助都将不胜感激。你知道吗


Tags: jsonnumbernlpprobabilityplatformpredictioncontrolleric
2条回答

请尝试以下代码:

data = [{'IC_Prediction': 'NPU-Soldier-Fractures', 'IC_Probability': 0.8, 'Signatures': 'PLATFORM-MLP-2', 'sr_number': 687485784}, {'IC_Prediction': 'Hotswap-Controller', 'IC_Probability': 0.63, 'Signatures': 'PLATFORM-NLP-3', 'sr_number': 687485784}, {}, {}, {}]

inter_dict = dict()
for row in data:
    sr_number = row.get('sr_number',"")
    if not sr_number:
        continue
    if sr_number and inter_dict.get(sr_number):
        _dict_new = inter_dict.get(sr_number)
        if _dict_new.get('recommedations', ""):
            arr = _dict_new.get('recommedations')
            arr.append({
                        'IC_Probability': row.get('IC_Probability'),
                        'IC_Prediction': row.get('IC_Prediction') 
            })
            _dict_new.update({'recommedations': arr})
        else:
            _dict_new.update({'recommedations': [{
                                                'IC_Probability': row.get('IC_Probability'),
                                                'IC_Prediction': row.get('IC_Prediction') 
                                                }]})

        if _dict_new.get('Signatures',""):
            arr = _dict_new.get('Signatures',"")
            arr.append(row.get('Signatures'))
            _dict_new.update({'Signatures': arr})
        else:
            _dict_new.update({'Signatures': [row.get('Signatures')]})
    else:
        inter_dict.update({sr_number: 
                            {
                                'sr_number': sr_number, 
                                'recommedations': [{
                                                    'IC_Probability': row.get('IC_Probability'),
                                                    'IC_Prediction': row.get('IC_Prediction')
                                                  }],
                                'Signatures': [row.get('Signatures')]

                            }

                        })


print([v for k, v in inter_dict.items()])
"""
[{'sr_number': 687485784, 'Signatures': ['PLATFORM-MLP-2', 'PLATFORM-NLP-3'], 'recommedations': [{'IC_Probability': 0.8,
 'IC_Prediction': 'NPU-Soldier-Fractures'}, {'IC_Probability': 0.63, 'IC_Prediction': 'Hotswap-Controller'}]}]  
"""

使用Groupby对具有相同sr\u编号的词典进行分组

from itertools import groupby

data = [{'IC_Prediction': 'NPU-Soldier-Fractures', 'IC_Probability': 0.8, 'Signatures': 'PLATFORM-MLP-2', 'sr_number': 687485784}, {'IC_Prediction': 'Hotswap-Controller', 'IC_Probability': 0.63, 'Signatures': 'PLATFORM-NLP-3', 'sr_number': 687485784}, {}, {}, {}]

x = groupby(data, lambda d: d.get('sr_number', None))
t = []
for k, g in groupby(data, lambda d: d.get('sr_number', None)):
  g_list = list(g)
  recommendations = [{i:d[i] for i in d if i!='Signatures' and i!='sr_number'} for d in g_list]
  signatures = [d[i] for d in g_list for i in d if i=='Signatures' ]
  new_dict = {}
  new_dict['src_number'] = k
  new_dict['recommendations'] = recommendations
  new_dict['signatures'] = signatures
  t.append(new_dict)

print(t)

输出

[{'src_number': 687485784, 'recommendations': [{'IC_Prediction': 'NPU-Soldier-Fractures', 'IC_Probability': 0.8}, {'IC_Prediction': 'Hotswap-Controller', 'IC_Probability': 0.63}], 'signatures': ['PLATFORM-MLP-2', 'PLATFORM-NLP-3']}, {'src_number': None, 'recommendations': [{}, {}, {}], 'signatures': []}]

相关问题 更多 >