【问题标题】:Converting json and flatten it to a table in python将json转换为python中的表并将其展平
【发布时间】:2022-01-04 05:55:16
【问题描述】:

我有一个已经展平的类别列表,但不确定如何将其转换为如下示例所示的表格。因此,如果 a has children 等于 false,那么这将是我的 id,然后如果 has children 为 true,我将得到名称,依此类推。我认为可以通过循环分类列表来完成



"response": {
    "category_list": [
      {
        "category_id": 100017,
        "parent_category_id": 0,
        "name": "Women Clothes",
        "has_children": true
      },
      {
        "category_id": 100118,
        "parent_category_id": 100017,
        "name": "Socks & Stockings",
        "has_children": true
      },
      {
        "category_id": 100419,
        "parent_category_id": 100118,
        "name": "Others",
        "has_children": false
      },
      {
        "category_id": 100418,
        "parent_category_id": 100118,
        "name": "Pantyhose",
        "has_children": false
      },
      {
        "category_id": 100417,
        "parent_category_id": 100118,
        "name": "Socks",
        "has_children": false
      }
]
}

所以结果应该是这样的:

Id Category 1 Category 2 Category 3 Category 4
100419 Women Clothes Socks & Stockings Others
100417 Women Clothes Socks & Stockings Pantyhose
100418 Women Clothes Socks & Stockings Socks

【问题讨论】:

  • 为什么要转发?
  • 你试过什么?这不是很困难。只需保留一个字典,将父 ID 映射到他们的名字。
  • @TimRoberts 还没有。抱歉,我是 python 新手 :(
  • @Potatooo 如果您先发布您的尝试,即使它不起作用,人们会更加敏感。只是要求别人为你做你的工作是不好的形式。

标签: python json list loops for-loop


【解决方案1】:

你还没有向我们展示很多东西。您的样本数据都有两个父母。那是通用的吗?会有一个父母吗?三个?

这会产生您想要的结果,并且应该处理任意祖先。

import json
from pprint import pprint

rawinp = """\
{
    "response": {
        "category_list": [
          {
            "category_id": 100017,
            "parent_category_id": 0,
            "name": "Women Clothes",
            "has_children": true
          },
          {
            "category_id": 100118,
            "parent_category_id": 100017,
            "name": "Socks & Stockings",
            "has_children": true
          },
          {
            "category_id": 100419,
            "parent_category_id": 100118,
            "name": "Others",
            "has_children": false
          },
          {
            "category_id": 100418,
            "parent_category_id": 100118,
            "name": "Pantyhose",
            "has_children": false
          },
          {
            "category_id": 100417,
            "parent_category_id": 100118,
            "name": "Socks",
            "has_children": false
          }
        ]
    }
}"""

data = json.loads(rawinp)

parents = {}
rows = []
for row in data["response"]["category_list"]:
    if row["has_children"]:
        if row["parent_category_id"]:
            parents[row["category_id"]] = parents[row["parent_category_id"]] + [row["name"]]
        else:
            parents[row["category_id"]] = [row["name"]]
    else:
        rows.append([row["category_id"]] + parents[row["parent_category_id"]] + [row['name']])

pprint(rows)

输出:

[[100419, 'Women Clothes', 'Socks & Stockings', 'Others'],
 [100418, 'Women Clothes', 'Socks & Stockings', 'Pantyhose'],
 [100417, 'Women Clothes', 'Socks & Stockings', 'Socks']]

【讨论】:

  • 这项工作.. 谢谢你
猜你喜欢
  • 2020-01-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-09
  • 1970-01-01
  • 2021-06-25
  • 2023-03-31
  • 1970-01-01
相关资源
最近更新 更多