将列表中的所有元素添加到 json dict

Adding all elements from list into json dict

我有一个包含几个嵌套元素的列表。例如:

list=[{'new1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
     {'new2': {'bar': [{'type': 'bar', 'bar': {'content': 'bar'}}]}}]

我还有一些 json 数据的字典,我需要通过 requests 提交。

例如,这很好用

json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}}
  ]
}

requests.post(url, headers=common_headers, data=json.dumps(json_data))

我想要做的是将 list 中的所有元素添加到 json_data 中。例如,如果我从列表中添加一个元素,它工作正常

json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      list[0]
  ]
}

因为变成了这个

json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'new1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}}
  ]
}

但是,如果我添加整个列表,它包括方括号 [] 并且会失败。例如,这个:

json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      list
  ]
}

变成

json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      [
          {'new1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
          {'new2': {'bar': [{'type': 'bar', 'bar': {'content': 'bar'}}]}}
      ]
  ]
}

方括号破坏了请求。因为我不知道列表中会有多少元素,所以我无法定义要使用的元素(如第一个示例)。

有没有简单的方法让我包含列表的所有元素,而不用方括号?

谢谢。

您需要将列表解压到目标位置

json_data = {
    "parent": {"foo": "bar"},
    "children": [
        {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
        {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
        *values
    ]
}

或使用list.extend

json_data = {
    "parent": {"foo": "bar"},
    "children": [
        {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
        {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
    ]
}
json_data['children'].extend(values)

不要为变量使用内置 list 关键字,那是列表构造函数

有一种简单的方法

只使用'+'

例如)

    json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}}
  ]
}

并且有一个我想添加的列表

list_ =      [
          {'new1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
          {'new2': {'bar': [{'type': 'bar', 'bar': {'content': 'bar'}}]}}
      ]

json_data['children'] += list_

结果

[{'existing1': {'foo': [{'foo': {'content': 'foo'}, 'type': 'foo'}]}},
 {'existing2': {'foo': [{'foo': {'content': 'foo'}, 'type': 'foo'}]}},
 {'new1': {'foo': [{'foo': {'content': 'foo'}, 'type': 'foo'}]}},
 {'new2': {'bar': [{'bar': {'content': 'bar'}, 'type': 'bar'}]}}]

一种快速简单的保留方式,从 Python 3.9(我的意思是)您可以使用 *list 即时扩展它,就像这里的代码一样。

json_data={
  "parent": { "foo": "bar" },
  "children": [
      {'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      {'existing2': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
      *list
  ]
}

它 return 像这样的字典。

{
    'parent': {
        'foo': 'bar'
    },
    'children': [{
        'existing1': {
            'foo': [{
                'type': 'foo',
                'foo': {
                    'content': 'foo'
                }
            }]
        }
    }, {
        'existing2': {
            'foo': [{
                'type': 'foo',
                'foo': {
                    'content': 'foo'
                }
            }]
        }
    }, {
        'new1': {
            'foo': [{
                'type': 'foo',
                'foo': {
                    'content': 'foo'
                }
            }]
        }
    }, {
        'new2': {
            'bar': [{
                'type': 'bar',
                'bar': {
                    'content': 'bar'
                }
            }]
        }
    }]
}

与其他答案略有不同,因为这允许在原始列表中添加更多条目:

list_ = [{'new1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}},
         {'new2': {'bar': [{'type': 'bar', 'bar': {'content': 'bar'}}]}}]

json_data = {"parent": {"foo": "bar"}, "children": []}

for dl in list_:
    for i, v in enumerate(dl.values(), 1):
        json_data["children"].append({f'existing{i}': v})

print(json_data)

输出:

{'parent': {'foo': 'bar'}, 'children': [{'existing1': {'foo': [{'type': 'foo', 'foo': {'content': 'foo'}}]}}, {'existing1': {'bar': [{'type': 'bar', 'bar': {'content': 'bar'}}]}}]}