创建一个带有列表的字典,不断添加项目而不是将其添加为新项目

问题描述 投票:0回答:1

我有一个正在创建字典的功能,但它没有给我想要的东西我明白为什么它给了我它,但我希望它略有不同我不希望它像列表中的另一个项目一样添加它希望将其添加为列表中对象的一部分。

{
  "Individual": [
    {
      "FullName": null
    },
    {
      "City": null
    },
    {
      "AddressLine1": null
    },
    {
      "State": null
    },
    {
      "PostCode": null
    },
    {
      "Gender": null
    }
  ],
  "AdditionalQuestion": null
}

我想要它给我

{
  "Individual": [
    {
      "FullName": null
      "City": null
      "AddressLine1": null
      "State": null
      "PostCode": null
      "Gender": null
    }

  ],
  "AdditionalQuestion": null
}

我想要它给我

{
  "Individual": [
    {
      "FullName": null
      "City": null
      "AddressLine1": null
      "State": null
      "PostCode": null
      "Gender": null
    }

  ],
  "AdditionalQuestion": null
}

这是代码

def template(data):
    def get_names(item):
        name_entry = None
        if "properties" in item:
            properties = item['properties']
            if properties:
                name_entry = {item['name'] :  [get_names(prop) for prop in properties if prop is not None and get_names(prop) is not None]}
        else:
            bad_names = ["id$","_link"]
            if item['name'] not in bad_names:
                name_entry = {item['name']: None}
        if name_entry:
            return name_entry
    data_list = [get_names(item) for item in data if get_names(item) is not None and get_names(item) is not None]
    
    data_dict = {}
    for item in data_list:
        data_dict.update(item)   
    return data_dict

输入类似于

[{"name": "Individual", "properties": [{"name": "FullName"},{"name": "City"},{"name": "AddressLine1"},{"name": "State"},{"name": "PostCode"},{"name": "Gender"}]},{"name": "SigningDate"}]
json python-3.x
1个回答
0
投票

你让事情变得比需要的更加困难。 每个级别都是相同的,因此递归是处理它的正确方法。 在每个阶段,要么有“属性”,这是一个简单的递归调用,要么没有:

def template(data):
    out = {}
    for item in data:
        if 'properties' in item:
            out[item['name']] = template(item['properties'])
        else:
            out[item['name']] = None
    return out

z = [{"name": "Individual", "properties": [{"name": "FullName"},{"name": "City"},{"name": "AddressLine1"},{"name": "State"},{"name": "PostCode"},{"name": "Gender"}]},{"name": "SigningDate"}]

print(template(z))

输出:

{'Individual': {'FullName': None, 'City': None, 'AddressLine1': None, 'State': None, 'PostCode': None, 'Gender': None}, 'SigningDate': None}
© www.soinside.com 2019 - 2024. All rights reserved.