带有元组的列表:将没有重复的特定元素添加到新列表

时间:2018-05-12 23:22:57

标签: python list set

我得到了以下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元素不一样。

3 个答案:

答案 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.itemgetterset

一起使用
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')}