这是一个作业问题。我很确定我需要使用namedtuple。
我有一些看起来像这样的数据列表:
services.AddDbContext<ICalendarDbContext, CalendarDbContext>(options =>
options.UseSqlServer(...));
目标是创建一个包含所有姓氏的字典-即-在“史密斯”上分组。排除名字。
data = [["first", "last", "info", "info", "info"],["first m.",
"last", "info", "info", "info"]...]
这是我尝试过的:
output = { "last1": [["info","info","info"],
["info","info","info"]], "last2": [["info","info","info"]]...}
输出几乎在那儿,但是我质疑我是否在正确使用namedtuples。我的输出看起来像这样:
facultyByLastname = defaultdict(list)
for first, last, info, info, info in facultyData:
facultyByLastname[last].append(info)
facultyByLastname[last].append(info)
facultyByLastname[last].append(info)
与其将单个人的数据保留在他们的列表中,它不对他们进行分组,并将所有具有相同姓氏的数据粘贴到一个列表中。
我被困住了,需要一些帮助!
答案 0 :(得分:2)
您不需要命名元组或默认字典。主要的问题是您分解列表的方式:
for first, last, info, info, info in facultyData:
尚不清楚您打算将变量info
保留在这里什么。相反,您可以使用以下方法获取列表的其余部分:
for first, last, *info in facultyData:
然后,您可以使用setdefault
在字典中进行输入(如果尚不存在):
data = [["first", "last", "info", "info", "info"],["first m.", "last2", "info", "info", "info"], ["first m.", "last", "info", "info", "info"]]
facultyByLastname = {}
for first, last, *info in data:
facultyByLastname.setdefault(last, []).append(info)
结果
{'last': [['info', 'info', 'info'], ['info', 'info', 'info']],
'last2': [['info', 'info', 'info']]}