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