JSON GroupBy 2属性-Python

时间:2019-06-06 11:48:41

标签: python json pandas-groupby itertools

在尝试聚合JSON属性时遇到一些困难。 基本上,我想做的是将'InputTable'数组中的对象按两个属性'To''TemplateName'分组。 JSON模板如下所示:

x = {
        "InputTable" : 
        [
            {
                "ServerName":"ServerOne",
                "To":"David", 
                "CC":"Oren", 
                "TemplateName":"LinuxVMOne", 
            },
            {
                "ServerName":"ServerTwo",
                "To":"David", 
                "CC":"", 
                "TemplateName":"LinuxVMOne", 
            },
            {
                "ServerName":"ServerThree",
                "To":"David", 
                "CC":"", 
                "TemplateName":"LinuxVMTwo", 
            },
            {
                "ServerName":"ServerFour",
                "To":"Sam", 
                "CC":"Samer", 
                "TemplateName":"LinuxVMOne", 
            }   
        ]
}

预期结果如下所示,其中列出了具有分组对象的列表:

[ 
   [

      {
                "ServerName":"ServerOne",
                "To":"David", 
                "CC":"Oren", 
                "TemplateName":"LinuxVMOne"
      },
      {
                "ServerName":"ServerTwo",
                "To":"David", 
                "CC":"", 
                "TemplateName":"LinuxVMOne", 
      },

  ],

  [
      {
                "ServerName":"ServerThree",
                "To":"David", 
                "CC":"", 
                "TemplateName":"LinuxVMTwo", 
      },

  ],

  [
      {
                "ServerName":"ServerFour",
                "To":"Sam", 
                "CC":"Samer", 
                "TemplateName":"LinuxVMOne", 
      }
  ] 



]

]

是否可以不使用熊猫来做到这一点? 谢谢。

1 个答案:

答案 0 :(得分:2)

此代码有效:

但是我认为我们可以使代码更简洁!

y = []
for i in x["InputTable"]:
    if len(y) == 0:
        y.append([i])
    else:
        for j in y:
            if len(j) > 0:
                if j[0]["To"] == i["To"] and j[0]["TemplateName"] == i["TemplateName"]:
                    j.append(i)
                    break
                else:
                    y.append([i])
                    break   
            else:
                y.append([i])
                break