Python 将值从列表插入嵌套的json
我有一个嵌套的json,如下所示:Python 将值从列表插入嵌套的json,python,json,django,expression,Python,Json,Django,Expression,我有一个嵌套的json,如下所示: [ { 'Name':'Anders', 'Type':'Hunter', 'Race':'Cyborg', }, { 'Name':'Karin', 'Type':'Titan', 'Race':'Human', }, { 'Name':'Jenny', 'Type':'Warl
[
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
},
]
['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
[
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
'string1':'1',
'Food_1':'Ham',
'Food_2':'Spam',
'Food_3':'Bacon',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
'string1':'1',
'Food_1':'Ham',
'Food_2':'Cucumber',
'Food_3':'Tomato',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
'string1':'1',
'Food_1':'Wood',
'Food_2':'Potato',
'Food_3':'Herring',
},
]
我有一个字符串,看起来像这样:
[
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
},
]
['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
[
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
'string1':'1',
'Food_1':'Ham',
'Food_2':'Spam',
'Food_3':'Bacon',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
'string1':'1',
'Food_1':'Ham',
'Food_2':'Cucumber',
'Food_3':'Tomato',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
'string1':'1',
'Food_1':'Wood',
'Food_2':'Potato',
'Food_3':'Herring',
},
]
我想将字符串插入到json中,并使用值的名称。字符串中的每四个表示json中的每个人
最终结果应如下所示:
[
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
},
]
['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
[
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
'string1':'1',
'Food_1':'Ham',
'Food_2':'Spam',
'Food_3':'Bacon',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
'string1':'1',
'Food_1':'Ham',
'Food_2':'Cucumber',
'Food_3':'Tomato',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
'string1':'1',
'Food_1':'Wood',
'Food_2':'Potato',
'Food_3':'Herring',
},
]
我尝试了一些迭代,但总是失败:/
希望你能帮助我 我假设您的数据结构是python dict和list,而不是包含json文本的字符串 首先,将你的简单列表插入一个由4个项目组成的区块列表中。你可以阅读一些其他的方法 导致:
[['1', 'Ham', 'Spam', 'Bacon'], ['1', 'Ham', 'Cucumber', 'Tomato'], ['1', 'Wood', 'Potato', 'Herring']]
然后,同时迭代两个集合。您可以为此使用:
for entry, new_stuff in zip(existing_data, chunks):
entry["string1"] = new_stuff[0]
entry["Food_1"] = new_stuff[1]
entry["Food_2"] = new_stuff[2]
entry["Food_3"] = new_stuff[3]
在此之后,您的收藏应该与预期的一样。答案1的备选方案:
json_list = [
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
},]
foods = ['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
for _ in json_list:
_.update({'string1': foods[0], 'food_1': foods[1], 'food_2': foods[2], 'food_3': foods[3]})
foods = foods[4:]
json_list
导致
[{'Race': 'Cyborg', 'food_3': 'Bacon', 'string1': '1', 'food_2': 'Spam', 'Name': 'Anders', 'Type': 'Hunter', 'food_1': 'Ham'}, {'Race': 'Human', 'food_3': 'Tomato', 'string1': '1', 'food_2': 'Cucumber', 'Name': 'Karin', 'Type': 'Titan', 'food_1': 'Ham'}, {'Race': 'Marsian', 'food_3': 'Herring', 'string1': '1', 'food_2': 'Potato', 'Name': 'Jenny', 'Type': 'Warlock', 'food_1': 'Wood'}]
一种简洁的方法是使用and函数将新数据分解成块
import json
data = [
{
'Name':'Anders',
'Type':'Hunter',
'Race':'Cyborg',
},
{
'Name':'Karin',
'Type':'Titan',
'Race':'Human',
},
{
'Name':'Jenny',
'Type':'Warlock',
'Race':'Marsian',
},
]
keys = ['string1', 'Food_1', 'Food_2', 'Food_3']
new_data = [
'1', 'Ham', 'Spam', 'Bacon',
'1', 'Ham', 'Cucumber', 'Tomato',
'1', 'Wood', 'Potato', 'Herring',
]
# Create an iterator that yields chunks of length 4 from new_data
chunks = zip(*[iter(new_data)] * 4)
# Update the dicts in data with the new data
for d, t in zip(data, chunks):
d.update(zip(keys, t))
# Convert to JSON
json_data = json.dumps(data, indent=4)
print(json_data)
输出
[
{
"Name": "Anders",
"Type": "Hunter",
"Race": "Cyborg",
"string1": "1",
"Food_1": "Ham",
"Food_2": "Spam",
"Food_3": "Bacon"
},
{
"Name": "Karin",
"Type": "Titan",
"Race": "Human",
"string1": "1",
"Food_1": "Ham",
"Food_2": "Cucumber",
"Food_3": "Tomato"
},
{
"Name": "Jenny",
"Type": "Warlock",
"Race": "Marsian",
"string1": "1",
"Food_1": "Wood",
"Food_2": "Potato",
"Food_3": "Herring"
}
]
我们还可以将“分块”步骤放入主for
循环中:
for d, t in zip(data, zip(*[iter(new_data)] * 4)):
d.update(zip(keys, t))
但我认为上一个版本更具可读性。您不需要直接修改JSON;对其进行解码,更新生成的数据结构,然后对修改后的数据结构重新编码。