将namedtuple与现有列表一起使用

时间:2019-06-10 19:53:12

标签: python

这是一个作业问题。我很确定我需要使用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)

与其将单个人的数据保留在他们的列表中,它不对他们进行分组,并将所有具有相同姓氏的数据粘贴到一个列表中。

我被困住了,需要一些帮助!

1 个答案:

答案 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']]}