Как переместить ключ в словаре на верхний уровень в python?

Я пытаюсь переместить 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"
                }
            ]
        }
    ]
}

вы можете поделиться кодом, который вы пробовали

depperm 13.05.2022 19:45

Проблема решена. Я пропустил один уровень с моим кодом.

supershooter_30 13.05.2022 20:26

Вы должны хотя бы показать определения переменных (например, словарь d).

jcoppens 14.05.2022 20:03
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
2
3
33
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете попробовать это, он пройдет через общий список и заполнит индекс, который у вас есть для запуска ключа времени, на основе ключа времени, который находится в первом индексе.

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}]}

Другие вопросы по теме