我有一个看起来像这样的字典列表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
提交
取消