将列表中的值插入嵌套json

2024-05-15 11:04:22 发布

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

我有一个嵌套的json,如下所示:

[
    {
        'Name':'Anders', 
        'Type':'Hunter', 
        'Race':'Cyborg', 
    },
    {
        'Name':'Karin', 
        'Type':'Titan', 
        'Race':'Human', 
    },
    {
        'Name':'Jenny', 
        'Type':'Warlock', 
        'Race':'Marsian', 
    },
]

我有一条像这样的绳子:

^{pr2}$

我想用值的名称将字符串插入到json中。字符串中的每个四个代表json中的每个人。在

最终结果如下:

^{3}$

我尝试过一些迭代,但总是失败:/

希望你能帮助我!在


Tags: 字符串namejsontypehumancyborgrace绳子
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

结果

^{pr2}$

一种简洁的方法是使用^{}^{}函数将新数据分成块。在

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)

输出

^{pr2}$

我们还可以将“分块”步骤放入主for循环中:

for d, t in zip(data, zip(*[iter(new_data)] * 4)):
    d.update(zip(keys, t))

但我认为之前的版本更具可读性。在

我假设您的数据结构是python dict和list,而不是包含json文本的字符串。在

首先,把你要插入的东西的简单列表变成一个由4个项目组成的列表。你可以阅读一些其他的方法来做这个here。在

new_things = ['1', 'Ham', 'Spam', 'Bacon', '1', 'Ham', 'Cucumber', 'Tomato', '1', 'Wood', 'Potato', 'Herring']
chunks = [new_things[i:i+4] for i in range(0, len(new_things), 4)]

导致:

^{pr2}$

然后,同时迭代两个集合。您可以使用zip进行此操作:

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]

在那之后,你的收藏应该像预期的那样。在

相关问题 更多 >