Python操作元组列表

时间:2016-11-21 18:41:03

标签: python list python-3.x tuples

我有一个元组列表,其模式为"id""text""language",如下所示:

a = [('1', 'hello', 'en'), ('1', 'ciao', 'it'), ('2', 'food', 'en'), ('2', 'cibo', 'it')]

我想创建一个新的元组(如表),其中有三列:

"id""en_lang""it_lang"

b = [('1', 'hello', 'ciao'), ('2', 'food', 'cibo')]

我问是否有一个允许我做这件事的功能。

2 个答案:

答案 0 :(得分:0)

带有yeild和zip的基本解决方案:

:before

这应该为您提供所有>>> def get_en_it_words(a): ... for tup1, tup2 in zip(a[0::2], a[1::2]): ... yield (tup1[0], tup1[1], tup2[1]) ... >>> a = [('1', 'hello', 'en'), ... ('1', 'ciao', 'it'), ... ('2', 'food', 'en'), ... ('2', 'cibo', 'it')] >>> list(get_en_it_words(a)) [('1', 'hello', 'ciao'), ('2', 'food', 'cibo')] 字,

'en'

和其他一个>>> a[0::2] [('1', 'hello', 'en'), ('2', 'food', 'en')] 字,

'it'

答案 1 :(得分:0)

您可以使用defaultdict

对项目进行分组
from collections import defaultdict

a = [('1', 'hello', 'en'), ('1', 'ciao', 'it'),
     ('2', 'food', 'en'), ('2', 'cibo', 'it')]

d = defaultdict(list)

for item in a:
    d[item[0]].append(item[1])

然后可以将其转换为这样的元组列表:

b = sorted((k,) + tuple(v) for k, v in d.items())

但是,您可能会发现defaultdict本身很有用,因为它可以让您轻松地按id查找内容。