【发布时间】:2020-10-27 12:26:32
【问题描述】:
我正在尝试使用 Python 解决以下问题:
鉴于以下学生名单:
students = ['Tom', 'Kitty', 'Jessie', 'Chester', 'Curie', 'Darwing', 'Nancy', 'Sue', 'Peter', 'Andrew', 'Karren', 'Charles', 'Nikhil', 'Justin', 'Astha']
我需要将学生分成 3 组。每个学生的组标识由一个名为 assignment 的列表中相同索引位置的整数指定:
assignment = [2, 3, 3, 1, 3, 2, 3, 1, 1, 1, 2, 1, 3, 2, 2]
使用理解,我需要生成字典,其中组号为键,属于该组的学生列表为值,即。预期的输出是这样的:
{'Group 1': ['Chester', 'Sue', 'Peter', 'Andrew', 'Charles'],
'Group 2': ['Tom', 'Darwing', 'Karren', 'Justin', 'Astha'],
'Group 3': ['Kitty', 'Jessie', 'Curie', 'Nancy', 'Nikhil']}
我的第一步是将 2 个列表压缩在一起以生成元组列表:
zip(students,assignment)
我生成了一个空字典来存储组成员:cdict = {}
我的逻辑是:检查每个元组中的整数(组号)。如果字典键中不存在该号码,请创建一个新号码并添加与该组号码对应的名称。如果存在,则将该值添加到字典的值列表中。
我想出了以下代码:
groupdict = {'Group{}'.format(group):[name] for name,group in zip(students,assignment) if group not in groupdict.keys()}
但是,它给了我以下结果:
{'Group 2': ['Astha'], 'Group 3': ['Nikhil'], 'Group 1': ['Charles']}
我试图包含 else 语句:
groupdict = {'Group{}'.format(group):[name] for name,group in zip(students,assignment) if group not in groupdict.keys() else groupdict[group].append(name)}
但它给了我一个 SyntaxError。
我应该如何修改我的理解代码以存储值列表而不是仅存储最新值?除了使用setdefault() 函数或导入库之外,还有其他方法可以完成吗?我的代码中应该只包含for、if、else 和zip()。
提前感谢您的帮助! :)
【问题讨论】:
标签: python dictionary string-formatting dictionary-comprehension keyvaluepair