首页 > 解决方案 > 在python中根据它们内部的特定键合并这两个json对象?(请查看示例)

问题描述

有没有办法根据“matchID”匹配这些 json 对象,并将它们变成一个具有合并数据的对象?我基本上希望这些制作一个表格,其中包含参与同一比赛 ID 的每个玩家的统计数据。

输入:

    data_list = [
    {
        "kloweritotv#3560772":[
            {
                "kd":2,
                "kills":6,
                "teamPlacement":3,
                "damageDone":2388,
                "matchID":"12887455297423544724"
            },
            {
                "kd":1,
                "kills":4,
                "teamPlacement":14,
                "damageDone":1828,
                "matchID":"11929202821836542057"
            },
        ]
    },
    {
        "Stylnox07":[
            {
                "kd":4.5,
                "kills":9,
                "teamPlacement":3,
                "damageDone":2549,
                "matchID":"12887455297423544724"
            },
            {
                "kd":1.5,
                "kills":3,
                "teamPlacement":14,
                "damageDone":1008,
                "matchID":"11929202821836542057"
            }
    }
]

所需的输出(伪代码):

[
   {
      "matchid":12887455297423544724,
      "kloweritotv":{
         "kd":2,
         "kills":6,
         "teamPlacement":3,
         "damageDone":2388,
         "matchID":"12887455297423544724"
      },
      "Stylnox07":{
         "kd":4.5,
         "kills":9,
         "teamPlacement":3,
         "damageDone":2549,
         "matchID":"12887455297423544724"
      }
   },
   {
      "matchid":11929202821836542057,
      "kloweritotv":{
         "kd":1,
         "kills":4,
         "teamPlacement":14,
         "damageDone":1828,
         "matchID":"11929202821836542057"
      },
      "Stylnox07":{
         "kd":1.5,
         "kills":3,
         "teamPlacement":14,
         "damageDone":1008,
         "matchID":"11929202821836542057"
      }
   }
]

任何信息肯定会非常有帮助!蒂亚!

更新:为了更容易理解,去掉了额外的匹配。换句话说,如果用户 1 有 match_id 123 并且用户 2 也有 match_id 123 - 它们都应该与各自的数据合并到一个 match_id 123 下。

标签: pythondjangoalgorithm

解决方案


def collect_data(key_id, match_id):
    d = []
    for k1 in data_list:
        for k2 in k1:
            if k2 != key_id: continue
            for e in k1[k2]:
                if e.get('matchID', None) == match_id:
                    e1 = e.copy()
                    e1.pop('matchID')
                    d.append(e1)
    return d

dics = {}
for k1 in data_list:
    for k2 in k1:        
        for e in k1[k2]:
            m = e.get('matchID', None)
            if m is None: continue
            if not m in dics: dics[m] = {}
            dics[m].update({k2: collect_data(k2, m)})

推荐阅读