将列表中的所有元素添加到 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'}}]}}]}
我有一个包含几个嵌套元素的列表。例如:
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'}}]}}]}