根据出现次数对元组进行排序

时间:2019-04-02 22:45:42

标签: python tuples

我有一个包含类似元组的列表

[('a','apple'),('a','ant'),('a','apple'),('b','banana')]

我想基于第一个值进行排序

[('a','apple','ant', 3),('b','banana', 1)]

我尝试过分离元组并对其进行计数,但是重新组合它们太麻烦了。有没有更简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用dict.fromkeys方法在保留输入顺序的同时删除重复项。如果您使用的是Python 3.6或更早版本,请使用collections.OrderedDict代替dict。

l = [('a','apple'),('a','ant'),('a','apple'),('b','banana')]
d = {}
for k, v in l:
    d.setdefault(k, []).append(v)
print([(k, *dict.fromkeys(s), len(s)) for k, s in d.items()])

这将输出:

[('a', 'apple', 'ant', 3), ('b', 'banana', 1)]

如果您使用的Python 3.5之前的版本不支持通用拆包,则必须将元组串联起来:

from collections import OrderedDict
l = [('a','apple'),('a','ant'),('a','apple'),('b','banana')]
d = {}
for k, v in l:
    d.setdefault(k, []).append(v)
print([(k,) + tuple(OrderedDict.fromkeys(s)) + (len(s),) for k, s in d.items()])