Я пытаюсь переместить 2 пары ключ-значение «время: 1000» и «время: 5000» из нижнего словаря на верхний уровень, а затем удалить исходный под «имя». Ниже приведен образец dict. Я попробовал поп,
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).






Вы можете попробовать это, он пройдет через общий список и заполнит индекс, который у вас есть для запуска ключа времени, на основе ключа времени, который находится в первом индексе.
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)
Предполагая d входной словарь, вы можете использовать:
for d1 in d['total']:
for d2 in d1['name']:
d1['time'] = d2.pop('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}]}
вы можете поделиться кодом, который вы пробовали