我有一个由Category,Tag,TagCount组成的元组列表。它们按类别和标记计数排序。你知道吗
[(u'Agriculture', u'Farming', 3L), (u'Agriculture', u'Business', 2L), (u'Agriculture', u'Animal', 2L), (u'Agriculture', u'Illness', 1L), (u'Agriculture', u'Health', 1L), (u'Agriculture', u'Disability', 1L),
(u'Agriculture', u'Carers', 1L), (u'Employment', u'Money', 1L), (u'Employment', u'Business', 1L),
(u'Employment', u'Tax', 1L), (u'Employment', u'Debt', 1L), (u'Employment', u'Budget', 1L),
(u'Environment', u'Business', 2L), (u'Environment', u'Animal', 2L), (u'Environment', u'Trees', 2L)]
我希望能够得到前3个元组在每个类别。所以我想回来
[(u'Agriculture', u'Farming', 3L), (u'Agriculture', u'Business', 2L), (u'Agriculture', u'Animal', 2L),
(u'Employment', u'Money', 1L), (u'Employment', u'Business', 1L), (u'Employment', u'Tax', 1L),
(u'Environment', u'Business', 2L), (u'Environment', u'Animal', 2L), (u'Environment', u'Trees', 2L)]
我知道我可以在for循环和计数器中使用它,但是我觉得使用lambdas可能有一种简单的方法我完全不知道。你知道吗
以下是我的作品:
output = []
counter = 1
last_category = ''
for res in results:
category = res[0]
if category != last_category: counter = 1
if category == last_category:
if counter <= 3:
output.append(res)
counter +=1
last_category = category
您可以使用列表来完成:
它假定
a
是元组列表。你知道吗输出:
你似乎需要的是
groupby()
。你知道吗它给出:
您可以先对项目进行分组,然后对每组的前3个项目进行切片。地址:
对于一般情况,如果项目尚未排序(按类别和计数),则可以使用以下方法进行初始排序:
这将对类别和递减计数进行排序。你知道吗
相关问题 更多 >
编程相关推荐