嘿,我有输入作为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_number‘对它们进行分组,其愿望输出如下。
[ { ‘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很陌生,所以不知道使用哪种数据结构,也不知道如何完成它。任何帮助都将不胜感激。
发布于 2019-12-18 12:19:58
试试下面的代码:
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'}]}]
"""发布于 2019-12-18 13:41:12
使用Groupby对具有相同sr_number的字典进行分组
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)Outut
[{'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': []}]https://stackoverflow.com/questions/59391459
复制相似问题