我真的很感激我的问题上的一些意见 - 似乎无法使其发挥作用。我需要遍历一个元组列表,例如:
li = [('a',1),('b',2),('c', 2),('d', 2), ('e', 3), ('f', 3), ('g', 1)]
并希望获得如下结果:
new_li = [('a', 1), ('bcd',2), ('ef',3), ('g',1)]
我根据元组中的第二个值连接字符串。我不想使用groupby
中的itertools
,因为即使g
与1
相关联,它也不会立即在a
旁边。
感谢您的所有回复!
答案 0 :(得分:8)
IIUC,您可以按顺序使用itertools.groupby
:
例如:
from itertools import groupby
new_li = [
("".join(y[0] for y in g), x) for x, g in groupby(li, key=lambda x: x[1])
]
print(new_li)
#[('a', 1), ('bcd', 2), ('ef', 3), ('g', 1)]
groupby
的keyfunc从每个元组中获取数字。然后,对于每个组,您可以使用str.join
将字母连接在一起。
答案 1 :(得分:2)
从您的描述中为什么您不想使用groupby
我推断您确实希望将a
和g
组合在一起。所以也许试试这个:
li = [('a',1),('b',2),('c', 2),('d', 2), ('e', 3), ('f', 3), ('g', 1)]
from collections import defaultdict
d = defaultdict(list)
for c,i in li:
d[i].append(c)
new_li = [(''.join(cs), i) for (i, cs) in d.items()]
print(new_li)
# output: [('ag', 1), ('bcd', 2), ('ef', 3)]