将列表转换为仅基于tup的某些值的重复的集合

2024-06-16 11:27:27 发布

您现在位置:Python中文网/ 问答频道 /正文

通常,将列表转换为集合很简单,如下所示:

a = [1,2,3,1]
set_a = set(a)    # set([1, 2, 3])

现在,我想将元组列表转换为set,只考虑元组的第一个值。你知道吗

a = [(1,"a1"), (2,"b2"), (3, "c3"), (1, "d4")]
set_a = some_magic(a)

# 1) set_a = set([(1,"a1"), (2,"b2"), (3, "c3")]) or
# 2) set_a = set([(1, "d4"), (2,"b2"), (3, "c3")])
# Both (1) or (2) are acceptible outputs.

有没有一个“单行”技巧可以代替上面提到的some_magic函数?你知道吗

我希望避免为簿记单独列出元组的第一个索引中已经使用了哪些(否则这将是显而易见的答案)


Tags: or列表a1magicsomeoutputsb2are
3条回答
set_a = set(
    {x[0]: x for x in a}.values()
)

使用列表理解:

a = [(1,"a1"), (2,"b2"), (3, "c3"), (1, "d4")]
seen = set()
print([x for x in a if x[0] not in seen and not seen.add(x[0])])

输出

[(1, 'a1'), (2, 'b2'), (3, 'c3')]

编辑:

使用dict:

print({x[0]: x for x in a}.values())

试试这个:

set(dict(a).items())

dict(a)将把列表变成一个字典,在字典中,每次出现时键都会被覆盖

.items()将每个键值对提取到一个dict_items元组列表中

set()将其转换为所需的集合

注意:这将给出第二个示例,保留最后一个唯一的元组键。如果你想要第一个,就需要一个不同的方法

相关问题 更多 >