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

How to move a key in a dictionary to upper level in python?

我正在尝试将2对键值“time:1000”和“time:5000”从字典下移到上层,然后删除“name”下的原始键值对。下面是示例字典。 我试过 pop,

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

但代码将 return 一条错误消息,“类型错误,'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"
                }
            ]
        }
    ]
}

你可以试试这个,它会遍历总列表并根据第一个索引中的时间键运行填写你拥有的索引

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')

请注意,此 sets/overwrites '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}]}