我有一个看起来像这样的字典列表list = [          {Name: Fred, Points: 1, Date: 1-20-2020},          {Name: Fred, Points: 3, Date: 1-15-2020},          {Name: Fred, Points: 5, Date: 1-13-2020},       ]我怎样才能按名称将它们组合起来呢?list = [{           Name: Fred, Scores: [{                                   Points: 1, Date: 1-20-2020,                                   Points: 3, Date: 1-15-2020,                                   Points: 5, Date: 1-13-2020                               ]           ]          我试图创建一个名称列表,然后将其余值映射回名称,但这没有按预期工作。names = []for name in list:    names.append(        {            'Name': name['Name']        })for name in list:    for name in names:        if name['Name'] == name['Name']:            name['Scores'] = [                {                    'Date': name['Date'],                    'FPTS': name['Points']                }]
                    
                    
                1 回答
 
                    
                    
                            白板的微信
                            
                                
                            
                        
                        
                                                
                    TA贡献1883条经验 获得超3个赞
第一个循环应该创建一个空Scores列表。然后第二个列表可以附加到适当的列表。
您需要防止多次将相同的名称添加到新列表中。在我下面的代码中,我使用 aset来记住已经添加了哪些名称。
另外,不要name在第二个循环的嵌套循环中使用相同的变量。
names = []
names_appended = set()
for name in list:
if name['Name'] not in names_appended:
names.append(
{
'Name': name['Name'],
'Scores': []
})
names_appended.add(name['Name'])
for name in list:
for name2 in names:
if name['Name'] == name2['Name']:
name2['Scores'].append({'Date': name['Date'], 'Points': name['Points']})
如果您的新结构是使用名称作为键的字典,而不是字典列表,那会容易得多。那么你就不需要嵌套循环了。
添加回答
举报
0/150
	提交
		取消
	