如何解析元组列表并删除类似的元组?

时间:2019-02-09 22:37:45

标签: python list tuples

我有一个类似这样的元组列表

tupleList = [('A',1), ('B',1), ('B',2), ('B',3), ('C',1)]

我希望能够解析此列表,获取具有相同字母的任何元组,然后删除具有较大字母数的元组并仅保留具有最小字母数的元组,因此我的输出将是:

('A',1), ('B',1), ('C',1)

2 个答案:

答案 0 :(得分:1)

您可以从itertools.groupby开始使用第二个元素对元组进行分组。

然后,为了在每个组中保持最小值,可以使用min,它允许您指定key,用它可以指定排序功能。在这种情况下,您可以使用key = itemgetter(1),它将在每个元组的第二元素中找到最小值:

from itertools import groupby
from operator import itemgetter
tupleList = [('A',1), ('B',1), ('B',2), ('B',3), ('C',1)]

[min(v, key = itemgetter(1)) for k, v in groupby(tupleList, key = itemgetter(0))]

输出

[('A', 1), ('B', 1), ('C', 1)]

答案 1 :(得分:-4)

您基本上将每个元组放入tupleList中,并将其与其中的其他元组进行比较-如果它们具有相同的字母,则比较它们的值。删除值更大的那一个:

tupleList1 = [('A',2), ('A',1), ('A',3), ('B',1), ('B',2), ('B',3), ('C',1)]
tupleList2 = [('A',2), ('A',1), ('A',3), ('B',1), ('B',2), ('B',3), ('C',1)]


print(tupleList1)
for t1 in tupleList1:
    for t2 in tupleList2:
        if t2[0] == t1[0]:
            if t1[1] < t2[1]:
                tupleList1.remove(t2)
            elif t1[1] > t2[1]:
                tupleList1.remove(t1)
                tupleList2.remove(t1)
                t1 = t2

print(tupleList1)