我有一个包含类似元组的列表
[('a','apple'),('a','ant'),('a','apple'),('b','banana')]
我想基于第一个值进行排序
[('a','apple','ant', 3),('b','banana', 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()])