首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将JSON对象转换为类似密钥的JSON对象数组

将JSON对象转换为类似密钥的JSON对象数组
EN

Stack Overflow用户
提问于 2019-12-18 11:52:54
回答 2查看 104关注 0票数 2

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

代码语言:javascript
复制
[ 
{ 
  ‘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‘对它们进行分组,其愿望输出如下。

代码语言:javascript
复制
[ { ‘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很陌生,所以不知道使用哪种数据结构,也不知道如何完成它。任何帮助都将不胜感激。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-12-18 12:19:58

试试下面的代码:

代码语言:javascript
复制
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'}]}]  
"""
票数 2
EN

Stack Overflow用户

发布于 2019-12-18 13:41:12

使用Groupby对具有相同sr_number的字典进行分组

代码语言:javascript
复制
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

代码语言:javascript
复制
[{'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': []}]
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59391459

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档