[英]Combine dictionaries in a list of dictionaries by name key
我有一个看起来像这样的字典列表
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
]
]
我尝试创建一个名称列表,然后将 map 和 rest 的值返回到名称,但这并没有按预期工作。
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']
}]
第一个循环应该创建一个空的Scores
列表。 然后第二个列表可以 append 到相应的列表。
您需要防止多次将相同的名称添加到新列表中。 在下面的代码中,我使用一set
来记住已经添加了哪些名称。
此外,不要在第二个循环的嵌套循环中使用相同的变量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']})
如果您的新结构是一个使用名称作为键的字典,而不是一个字典列表,那将会容易得多。 那么你就不需要嵌套循环了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.