我有一个元组列表,如:
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')]}