0

私はリストを持っています

old_list = [
        (1, 'AAA', None, 1),
        (2, 'AAA', 'x', 0),
        (5, 'AAB', 'z', 1),
        (6, 'ABB', 'x', 1),
        (9, 'ABB', 'x', 1)]

この結果のように、一意の i[1] とより大きな ID i[0] を持つ新しいリストを取得する方法

new_list = [
        (2, 'AAA', 'x', 0),
        (5, 'AAB', 'z', 1),
        (9, 'ABB', 'x', 1)]
]

誰かが私を助けることができますか?

4

2 に答える 2

3

itertools.groupbyを使用できます

old_list = [
        (1, 'AAA', None, 1),
        (2, 'AAA', 'x', 0),
        (5, 'AAB', 'z', 1),
        (6, 'ABB', 'x', 1),
        (9, 'ABB', 'x', 1)]
from itertools import groupby
from operator import itemgetter
print [sorted(list(group), key=itemgetter(0))[-1]
       for key, group in groupby(old_list, key=itemgetter(1))]

出力

[(2, 'AAA', 'x', 0), (5, 'AAB', 'z', 1), (9, 'ABB', 'x', 1)]

まだソートされていない場合はold_list、次のようにソートできます

old_list = sorted([
        (1, 'AAA', None, 1),
        (2, 'AAA', 'x', 0),
        (5, 'AAB', 'z', 1),
        (6, 'ABB', 'x', 1),
        (9, 'ABB', 'x', 1)], key=itemgetter(1))
于 2013-10-28T03:31:00.220 に答える