Python 仅基于元组某些值的重复将列表转换为集合
通常,将列表转换为集合很简单,如下所示:Python 仅基于元组某些值的重复将列表转换为集合,python,python-3.x,set,Python,Python 3.x,Set,通常,将列表转换为集合很简单,如下所示: 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"),
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.
有没有一个“一行”的技巧可以代替上面提到的一些神奇的功能
我希望避免为簿记单独列出元组的第一个索引中已经使用了哪些(否则这将是显而易见的答案)尝试以下方法:
set(dict(a).items())
dict(a)
将把列表变成一个字典,每次出现时键都会被覆盖
.items()
将每个键值对提取到元组列表中
set()
注意:这将给出第二个示例,保留最后一个唯一的元组键。如果您想要第一个,则需要使用列表理解的不同方法:
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')]
编辑:
[(1, 'a1'), (2, 'b2'), (3, 'c3')]
使用口述:
print({x[0]: x for x in a}.values())
你可以转换成字典来消除重复的内容
set(dict(a).items())
{(1, 'd4'), (2, 'b2'), (3, 'c3')}
您如何决定从(1,“a1”)
和(1,“d4”)
保留哪个元组?它们都可以。。在问题中也提到了。。。