Python 如何从另一个键的值创建新键

Python 如何从另一个键的值创建新键,python,list,dictionary,key-value,Python,List,Dictionary,Key Value,我有一个字典列表,如下所示: data = [{'Name': 'Paul', 'Date': '20200412', 'ID': '1020'}, {'Name': 'Frank', 'Date': '20200413', 'ID': '1030'}, {'Name': 'Anna', 'Date': '20200414', 'ID': '1040'}] 我需要创建一个新的字典列表,其中ID的值将是键,该值是另一个字典,其中的键/值与这个特定ID关联。 这是所需的输出: new_data =

我有一个字典列表,如下所示:

data = [{'Name': 'Paul', 'Date': '20200412', 'ID': '1020'}, {'Name': 'Frank', 'Date': '20200413', 'ID': '1030'}, {'Name': 'Anna', 'Date': '20200414', 'ID': '1040'}]
我需要创建一个新的字典列表,其中ID的值将是键,该值是另一个字典,其中的键/值与这个特定ID关联。 这是所需的输出:

new_data = [{'1020': {'Name': 'Paul', 'Date': '20200412'}},
{'1030': {'Name': 'Frank', 'Date': '20200413'}},
{'1040': {'Name': 'Anna', 'Date': '20200414'}}]
我试过:

for index, my_dict in enumerate(data):
    new_data = []
    key = my_dict['ID']
    new_data.append(key)

但这只分配了键值,不确定如何将其与其他键值一起放入新的dict中。

您可以尝试以下列表:

>>> [{i['ID']: {k:v for k,v in i.items() if k != 'ID'}} for i in data]
[{'1020': {'Name': 'Paul', 'Date': '20200412'}},
 {'1030': {'Name': 'Frank', 'Date': '20200413'}},
 {'1040': {'Name': 'Anna', 'Date': '20200414'}}]
[{x["ID"]: {k: v for k, v in x.items() if k != "ID"}} for x in data]
它将
ID
指定为字典的父键,并从dict中的子字典中筛选出
ID

可以分为以下几点:

result = []
for x in data:
    result.append({x["ID"]: {k: v for k, v in x.items() if k != "ID"}})
甚至是直接的循环方法:

result = []
for x in data:
    dic = {x["ID"]: {}}
    for k, v in x.items():
        if k != "ID":
            dic[x["ID"]][k] = v
    result.append(dic)
输出:

[{'1020': {'Name': 'Paul', 'Date': '20200412'}}, {'1030': {'Name': 'Frank', 'Date': '20200413'}}, {'1040': {'Name': 'Anna', 'Date': '20200414'}}]

要添加其他值,只需创建一个新的dict,如下所示:

new_data.append( key:{
'name':my_dict['name']
'Date':my_dict['date']
}

您也不需要生成“key”变量,只需使用“my_dict['ID']”即可。

您能解释一下为什么此解决方案有效吗?此解决方案有效,因为我正在从dict
my_dict
中删除key“ID”,并且此变量指向
数据[index]
的相同内存位置。因此,在这种情况下,从迭代变量中删除密钥就足够了。它也可以是简单的
new_data.append({key:my_dict})
>id(data[index])4358425408>>id(my_dict)4358425408>>
这是输出-->
>new_data=[{1020':{Date 20200412',Name':'Paul},{1030':{Date Date 20200413',Name':'Frank'},{1040':'Date Name:'20200414}
new_data.append( key:{
'name':my_dict['name']
'Date':my_dict['date']
}