迭代元组列表

时间:2018-04-12 01:10:58

标签: python loops iteration

我真的很感激我的问题上的一些意见 - 似乎无法使其发挥作用。我需要遍历一个元组列表,例如:

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,因为即使g1相关联,它也不会立即在a旁边。 感谢您的所有回复!

2 个答案:

答案 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我推断您确实希望将ag组合在一起。所以也许试试这个:

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)]