2

Hey i am having input as list of JSON objects

[ 
{ 
  ‘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'
     }
  },{},{},{} ]

I am looking to group them based on 'sr_number' and the desires output is as follows.

[ { ‘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’]
},{},{}
]

I am new to python so don't know which data structure to use and how to get it done. Any help will be appreciated.

2 Answers 2

2

Try the below code:

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'}]}]  
"""
Sign up to request clarification or add additional context in comments.

Comments

1

Using Groupby to group dictionaries with same 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': []}]

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.