为了账号安全,请及时绑定邮箱和手机立即绑定

按名称键组合词典列表中的词典

按名称键组合词典列表中的词典

繁星coding 2023-02-12 19:10:14
我有一个看起来像这样的字典列表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']})

如果您的新结构是使用名称作为键的字典,而不是字典列表,那会容易得多。那么你就不需要嵌套循环了。


查看完整回答
反对 回复 2023-02-12
  • 1 回答
  • 0 关注
  • 81 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信