Как создать структурированный объект JSON из списков? - PullRequest
0 голосов
/ 18 октября 2018

Я пытаюсь создать структурированный объект JSON из данных, которые я сканирую.

Данные, которые я просканировал, хранятся в нескольких списках.list1 содержит имена событий, list2 содержит категории событий, а list3 содержит необработанные данные событий (которые хранятся в том же порядке, что и категории событий)

list1 = [['event1'], ['event2'], ['event3']]
list2 = [['team' , 'score', 'date'], ['team', 'location', 'date'], ['team', ' record']]
list3 = [['team1' , 'score1', 'date1', 'team2' , 'score2', 'date2'],
         ['team1' , 'location1', 'date1', 'team2' , 'location2', 'date2'],
         ['team1', 'record 1', 'team2', 'record2', 'team3', 'record3']]

Я пытаюсь создатьфайл json в формате:

{
  "event1": {
          "1": {
                  "team": team1,
                  "score": score1,
                  "date": date1,
               },
          "2": {
                  "team": team2,
                  "score": score2,
                  "date": date2,
               },

            },
  "event2": {
          "1": {
                  "team": team1,
                  "location": location1,
                  "date": date1,
               },
          "2": {
                  "team": team2,
                  "location": location2,
                  "date": date2,
               },
  "event3": {
          "1": {
                  "team": team1,
                  "record": record1,
               },
          "2": {
                  "team": team2,
                  "record": record2,
               },
          "3": {
                  "team": team3,
                  "record": record3,
               },
}

Возможно ли структурирование таким образом на Python?Я могу сделать это для циклов for на других языках, но я ломаю голову над тем, как добавлять данные с помощью python.

1 Ответ

0 голосов
/ 18 октября 2018

Надеюсь, вы понимаете мое решение, я прокомментировал его.

list1 = [['event1'], ['event2'], ['event3']]
list2 = [['team' , 'score', 'date'], ['team', 'location', 'date'], ['team', ' record']]
list3 = [['team1' , 'score1', 'date1', 'team2' , 'score2', 'date2'], ['team1' , 'location1', 'date1', 'team2' , 'location2', 'date2'], ['team1', 'record 1', 'team2', 'record2', 'team3', 'record3']]
out = {}
#iterate over each of the lists together
for (a,), b, c in zip(list1, list2, list3):
    #initialise the "event." attribute in the `out` dict
    out[a] = {}
    #chunk the lists in `list3` to the size of the lists in `list2` and iterate
    for i, l in enumerate([c[i:i+len(b)] for i in range(0, len(c), len(b))]):
        #for this chunk, initiate a sub dictionary under the "event." attr in `out`
        out[a][str(i+1)] = {}
        #iterate over the elements in the list from `list2`
        for j, e in enumerate(b):
            #assign the corresponding chunk element to the appropriate location.
            out[a][str(i+1)][e] = l[j]

, что дает:

{
    "event1": {
        "1": {
            "team": "team1",
            "score": "score1",
            "date": "date1"
        },
        "2": {
            "team": "team2",
            "score": "score2",
            "date": "date2"
        }
    },
    "event2": {
        "1": {
            "team": "team1",
            "location": "location1",
            "date": "date1"
        },
        "2": {
            "team": "team2",
            "location": "location2",
            "date": "date2"
        }
    },
    "event3": {
        "1": {
            "team": "team1",
            " record": "record 1"
        },
        "2": {
            "team": "team2",
            " record": "record2"
        },
        "3": {
            "team": "team3",
            " record": "record3"
        }
    }
}
...