Атрибуты JSON GroupBy 2 - Python - PullRequest
1 голос
/ 06 июня 2019

Я сталкиваюсь с некоторыми трудностями при попытке агрегировать атрибуты 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 Ответ

2 голосов
/ 06 июня 2019

Этот код работает:

Но я думаю, что мы можем сделать код чище!

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...