我得到了以下Python列表:
[(1, 2, 'Adam', 'M', '2', '12'),
(1, 2, 'Ewa', 'W', '2.0 (E)', '44'),
(1, 2, 'Ewa', 'W', '2.0 (E)', '44'),
(2, 3, 'Adam', 'M', '2', '12'),
(2, 3, 'Ewa', 'W', '2.0 (E)', '44')]
我想将带有元组的列表转换为以下结构:
list = [('Adam', '12'), ('Ewa', '44')]
我不知道如何以最简单的方式制作它。
我想过set()
,但元组的0和1元素不一样。
答案 0 :(得分:5)
尝试一下:
old_list = [(1, 2, 'Adam', 'M', '2', '12'),
(1, 2, 'Ewa', 'W', '2.0 (E)', '44'),
(1, 2, 'Ewa', 'W', '2.0 (E)', '44'),
(2, 3, 'Adam', 'M', '2', '12'),
(2, 3, 'Ewa', 'W', '2.0 (E)', '44')]
new_set = set((x[2],x[5]) for x in old_list)
print(new_set)
答案 1 :(得分:0)
鉴于所有值都相同而您只是想确保拥有所有项目,您可以使用dict
,例如:
In []
import operator as op
dict(map(op.itemgetter(2, 5), old_list))
# dict((e[2], e[5]) for e in old_list) # Alternative
Out[]
{'Adam': '12', 'Ewa': '44'}
您可以将其重新转换为包含list(dict.items())
(Py3)或dict.items()
(Py2)的列表,但您可能会发现dict
是一个有用的结构。< / p>
答案 2 :(得分:-2)
一种方法是将operator.itemgetter
与set
:
from operator import itemgetter
lst = [(1, 2, 'Adam', 'M', '2', '12'),
(1, 2, 'Ewa', 'W', '2.0 (E)', '44'),
(1, 2, 'Ewa', 'W', '2.0 (E)', '44'),
(2, 3, 'Adam', 'M', '2', '12'),
(2, 3, 'Ewa', 'W', '2.0 (E)', '44')]
res = set(map(itemgetter(2, 5), lst))
print(res)
{('Adam', '12'), ('Ewa', '44')}