2017-08-02 86 views
-3

说我有一个元组列表:如何重新组织一个列表?

[(98, 'studentA'), (97, 'studentB'), (98, 'studentC'), (95,'studentD')] 

,我想组织它使学生由第一数量的元组组合在一起,这将是最好的方法?

我在考虑创建一个列表数组,其中列表中的每个索引都是不同的分数(本例中为98,97和95),学生将在该索引的列表中。对于一个更大的数据集,我正在考虑创建一个链式哈希表,但我不确定应该把它分配给什么,以保证两个不相同的分数不会被散列到同一个地方。

+0

[按第二项(整数值)对元组列表进行排序](https://stackoverflow.com/questions/10695139/sort-a-list-of-tuples-by-2nd-item-integer值) –

+0

可能最简单的方法就是将列表折叠成字典,其中关键是分数。索引的想法会起作用,但是你有一个不必要的巨大数组,其中大部分元素都是'None'。 – Carcigenicate

回答

6

为什么不使用dictcollections.defaultdict将工作太:

d = defaultdict(list) 
for score, student in l: 
    d[score] += student 
0

尝试使用编号为

sorted(students, key=(lambda x: x[0])) 

的一个重要分类,但一本词典将是一个大的数据集

1

itertools.groupbyimport itertools第一)一个更好的主意是也是一个选项,但您必须先排序数据。

In [200]: [list(v) for _, v in itertools.groupby(sorted(l, key=operator.itemgetter(0)), operator.itemgetter(0))] 
Out[200]: [[(95, 'studentD')], [(97, 'studentB')], [(98, 'studentA'), (98, 'studentC')]] 

我还使用operator.itemgetterimport itemgetter第一),以避免lambda表达式。