我有一个元组列表,其模式为"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')]
我问是否有一个允许我做这件事的功能。
答案 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
查找内容。