如何在Python中根据Key和组合值对Json数据进行分组?

2024-06-16 14:27:49 发布

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

具有包含如下结构的json: 我尝试的是基于“name”对数据进行分组和合并,例如下面的两个示例具有相同的名称,即“abc”,因此它们将被合并到一个集合中,“id”和“nested prop”将是“name”下包含两个内容的数组

 [{
"id" : [{"random" : "12345"}],
"name" : "abc",
"nestedprop" : {
    "malfunc" : [ 
        {
            "Info" : {
                "xyz" : [ 
                    {
                        "vamp" : "104531_0_46095",
                        "ramp" : {
                            "samp" : [ 
                                {
                                    "int" : 532,
                                }
                            ],
                        },
                        "class_unique_id" : "05451",
                    }
                ],
                "nati" : 39237,
                "apper" : 00,
                "supp" : {
                    "sess" : ""
                },
                "session_id" : "42461920181213044516299872341"
            }
        },       
                      {
            "Info" : {
                "xyz" : [ 
                    {
                        "vamp" : "104531_0_46095",
                        "ramp" : {
                            "samp" : [ 
                                {
                                    "int" : 5325,
                                }
                            ],
                        },
                        "class_unique_id" : "05451",
                    }
                ],
                "nati" : 392537,
                "apper" : 00,
                "supp" : {
                    "sess" : ""
                },
                "session_id" : "42461920181213044516299872341"
            }
        },
    ]
  },
},
   { 
"id" : [{"asdad" : "63653"}],
 "name" : "abc",
 "nestedprop" : {
    "malfunc" : [ 
        {
            "Info" : {
                "xyz" : [ 
                    {
                        "vamp" : "104531_0_46095",
                        "ramp" : {
                            "samp" : [ 
                                {
                                    "int" : 532,
                                }
                            ],
                        },
                        "class_unique_id" : "05451",
                    }
                ],
                "nati" : 39237,
                "apper" : 00,
                "supp" : {
                    "sess" : ""
                },
                "session_id" : "42461920181213044516299872341"
            }
        },
      {
            "Info" : {
                "xyz" : [ 
                    {
                        "vamp" : "104531_0_46095",
                        "ramp" : {
                            "samp" : [ 
                                {
                                    "int" : 532,
                                }
                            ],
                        },
                        "class_unique_id" : "05451",
                    }
                ],
                "nati" : 39237,
                "apper" : 00,
                "supp" : {
                    "sess" : ""
                },
                "session_id" : "42461920181213044516299872341"
            }
        },
    ]
  }
 }]

预期结果:

^{pr2}$

注意:我已经在Mongodb中使用Mapreduce实现了这一点,但是我想在Python中尝试一下


Tags: nameinfoidsessionclassintsessunique
1条回答
网友
1楼 · 发布于 2024-06-16 14:27:49

可能有很多其他的方法,但是这个方法会给你想要的结果

names = []
for dic in dictList:
    names.append(dic['name'])

# unique list of names
names = list(set(names))


results = []

for name in names:
    idx = 0
    ids = {}
    props = {}
    names = []
    for dic in dictList:
        dic_name = dic['name']
        if dic_name == name:
            ids[str(idx)] = dic['id']
            props[str(idx)] = dic['nestedprop']
            idx += 1
    result_dict = {"name": name,
                   "id": ids,
                   "nestedprop": props}     

    results.append(result_dict)

# result = json.dumps(result)  to convert back into double quotes ""  
results

输出:

^{pr2}$

相关问题 更多 >