Как объединить объекты JSON из разных массивов с помощью Python - PullRequest
1 голос
/ 11 июля 2019

Я пытаюсь перебрать различные массивы JSON с помощью Python, чтобы объединить все объекты в одну структуру данных.JSON выглядит так:

data = {
  "Wednesday, Apr 3, 2019": [
    {
      "id": "000",
      "keyid": "4273666087",
      "name": "Raptor",
      "symbol": "RPT",
    },
    {
      "id": "111",
      "keyid": "1818114564",
      "name": "Duck",
      "symbol": "DUK",
    }
  ],
  "Tuesday, Apr 2, 2019": [
    {
      "id": "222",
      "keyid": "8032408148",
      "name": "Hawk",
      "symbol": "HWK",
    },
    {
      "id": "333",
      "keyid": "0362766431",
      "name": "Goose",
      "symbol": "GOO",
    }
  ]
}

Поскольку он выглядит как словарь, я попытался сделать:

for item in data.values():
   print(item)
   print("\n")

, который объединяет объекты каждого массива в отдельные списки.Но я хочу, чтобы все объекты были частью одной структуры данных, чтобы конечный результат выглядел примерно так:

id  | keyid      | name   | symbol
-----------------------------------
000 | 4273666087 | Raptor | RPT
-----------------------------------
111 | 1818114564 | Duck   | DUK
-----------------------------------
222 | 8032408148 | Hawk   | HWK
-----------------------------------
333 | 0362766431 | Goose  | GOO
-----------------------------------

Какой лучший способ сделать это?

Ответы [ 2 ]

1 голос
/ 11 июля 2019

Ты очень близко. Вы хотите пойти еще дальше и напечатать значения каждой строки.

print("id", "keyid\t", "name", "symbol", sep='\t|')

for group in data.values():
    for row in group:
        print("\t|".join([str(i) for i in row.values()]))

Для производства:

id      |keyid          |name   |symbol
000     |4273666087     |Raptor |RPT
111     |1818114564     |Duck   |DUK
222     |8032408148     |Hawk   |HWK
333     |0362766431     |Goose  |GOO
1 голос
/ 11 июля 2019

Использование pandas:

import pandas as pd
df = pd.DataFrame([x for k,v in data.items() for x in v])
print(df)

Выход:

    id       keyid    name symbol
0  000  4273666087  Raptor    RPT
1  111  1818114564    Duck    DUK
2  222  8032408148    Hawk    HWK
3  333  0362766431   Goose    GOO

Вы можете сделать это в обычном Python, но это будет большой проблемой, поэтому я поддерживаю использование pandas, которое может сделать это в одну строку.

Как вы хотите, вложенные циклы:

import pandas as pd
l = []
for k,v in data.items():
    for x in v:
        l.append(x)
df = pd.DataFrame(l)
print(df)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...