通常,将列表转换为集合很简单,如下所示:
a = [1,2,3,1]
set_a = set(a) # set([1, 2, 3])
现在,我只想将元组的第一个值转换为要设置的元组列表。
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
函数?
我想避免为簿记单独列出一个已经使用过的元组的第一个索引(否则,这显然是个答案)
答案 0 :(得分:5)
尝试一下:
set(dict(a).items())
dict(a)
会将列表变成字典,其中每次出现键都会覆盖键
.items()
将每个键值对提取到dict_items
元组列表中
set()
将其变成您想要的集合
注意:这将给您第二个示例,保留最后一个唯一的元组键。如果您想要第一个,则将需要另一种方法
答案 1 :(得分:0)
使用列表理解:
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')]
编辑:
使用字典:
print({x[0]: x for x in a}.values())
答案 2 :(得分:0)
set_a = set(
{x[0]: x for x in a}.values()
)
答案 3 :(得分:0)
您可以将其转换为词典以消除重复项
set(dict(a).items())
{(1, 'd4'), (2, 'b2'), (3, 'c3')}