繁体   English   中英

按名称键在字典列表中组合字典

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM