如何在某个索引中将具有相同元素的元组分组在一起



我有一个元组列表,如:

a = [('a', 'a', 'z', 'a'), ('b', 'b', 'z', 'b'), ('c', 'c', 'c', 'c')] #... and many more

我需要从列表中剪切所有元组,其中索引为[2]的项是相同的并将它们写入其他变量。

最后我应该有:

a = [('c', 'c', 'c', 'c')]
b = [('a', 'a', 'z', 'a'), ('b', 'b', 'z', 'b')]

我如何在Python中实现这一点?

尝试itertools groupby:

from itertools import groupby
k = sorted(k, key= lambda x: x[2]) # if elements are not in order
for grp,key in groupby(k, lambda x: x[2]):
print(f'group is {grp} is with value {list(key)}')

结果:

group is z is with value [('a', 'a', 'z', 'a'), ('b', 'b', 'z', 'b')]
group is c is with value [('c', 'c', 'c', 'c')]

根据索引2中的项创建元组的映射。为了方便起见,可以使用list:类型的defaultdict

from collections import defaultdict
a = [('a','a','z','a'), ('b','b','z','b'), ('c','c','c','c')]
res = defaultdict(list)
for tup in a:
res[tup[2]].append(tup)
print(res)

将给出:

{'z': [('a', 'a', 'z', 'a'), ('b', 'b', 'z', 'b')], 
'c': [('c', 'c', 'c', 'c')]}

最新更新