如何将字典中的键移动到python的上层?



我正在尝试移动2对键值"time:1000"one_answers"时间:5000";从下字典到上字典,然后删除"名称"下的原始字典。下面是示例字典。我试过pop,

for d in dict["total"]:
d['time'] = d['name'].pop('time')

但是代码会返回一个错误消息,"类型错误","str"对象不能被解释为整数。感谢任何帮助。谢谢!

{
"total": [
{
"ID": "a1",
"name": [
{
"time": 1000,
"first_name": "Mary",
"last_name": "Jones"
},
{
"time": 1000,
"first_name": "John",
"last_name": "Brown"
}
]
},
{
"batch_id": "a2",
"name": [
{
"time": 5000,
"first_name": "Jason",
"last_name": "Williams"
},
{
"time": 5000,
"first_name": "Mickael",
"last_name": "Kol"
}
]
}
]
}

下面是预期结果,

{
"total": [
{
"ID": "a1",
"time": 1000,
"name": [
{
"first_name": "Mary",
"last_name": "Jones"
},
{
"first_name": "John",
"last_name": "Brown"
}
]
},
{
"batch_id": "a2",
"time": 5000,
"name": [
{
"first_name": "Jason",
"last_name": "Williams"
},
{
"first_name": "Mickael",
"last_name": "Kol"
}
]
}
]
}

假设d是输入字典,您可以使用:

for d1 in d['total']:
for d2 in d1['name']:
d1['time'] = d2.pop('time')

注意,这设置/覆盖'time'键的次数与子列表中有字典的次数一样多(因此,如果值不同,则以最后一个为准),但是当我们使用pop时,这些显然无效的步骤也用于删除条目。而且,顺序与提供的输出不完全相同。

输出:

{'total': [{'ID': 'a1',
'name': [{'first_name': 'Mary', 'last_name': 'Jones'},
{'first_name': 'John', 'last_name': 'Brown'}],
'time': 1000},
{'batch_id': 'a2',
'name': [{'first_name': 'Jason', 'last_name': 'Williams'},
{'first_name': 'Mickael', 'last_name': 'Kol'}],
'time': 5000}]}

你可以试试这个,它会遍历整个列表并根据第一个索引

中的时间键来填充你运行时间键的索引
a = {
"total": [
{
"ID": "a1",
"name": [
{
"time": 1000,
"first_name": "Mary",
"last_name": "Jones"
}
]
},
{
"batch_id": "a2",
"name": [
{
"time": 5000,
"first_name": "Jason",
"last_name": "Williams"
}
]
}
]
}
for (index, i) in enumerate(a['total']):
a['total'][index]['time'] = i['name'][0]['time']
del a['total'][index]['name'][0]['time']
print(a)

相关内容

  • 没有找到相关文章

最新更新