平面json到嵌套json python

2024-10-03 21:32:11 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将输入json转换为定义的嵌套json,我想不出任何json库可以帮助我实现这一点

输入json

[{'Name': 'John', 'state': 'Boston', 'currency': 'USD', 'marks': 100},
{'Name': 'Rohan', 'state': 'Paris', 'currency': 'EUR', 'marks': 20},
{'Name': 'Rohan', 'state': 'Lyon', 'currency': 'EUR', 'marks': 11.4},
{'Name': 'Messi', 'state': 'Madrid', 'currency': 'EUR', 'marks': 9.9},
{'Name': 'Lampard', 'state': 'London', 'currency': 'GBP', 'marks': 12.2},
{'Name': 'Lampard', 'state': 'London', 'currency': 'FBP', 'marks': 10.9}]

输出json

{
  "USD": {
    "John": {
      "Boston": [
        {
          "Marks": 100
        }
      ]
    },


基于值货币、名称、状态和标记的当前场景

如果需要,可以将嵌套的json设置为n级,例如名称、状态和标记,也可以是名称、curreny、状态和标记,或者名称、curreny和标记


Tags: name标记名称json状态eurjohnboston
1条回答
网友
1楼 · 发布于 2024-10-03 21:32:11

因此,您需要货币>;名称>;国家>;标记列表

一种解决方案是使用defaultdict创建结构,然后添加到其中

from collections import defaultdict
from functools import wraps

data = [...]

def ddmaker(type_):
    @wraps(dict)
    def caller():
        return defaultdict(type_)
    return caller

# create the structure of the output
output = defaultdict(ddmaker(ddmaker(list)))

# add to it
for item in data:
    currency = item["currency"]
    name = item["Name"]
    state = item["state"]
    mark = item["marks"]

    output[currency][name][state].append({'Marks': mark})

相关问题 更多 >