python - 将列表转换为仅基于元组某些值的副本的集合

标签 python python-3.x set

一般情况下,将列表转换为集合很简单,如下所示:

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 函数?

我想避免制作一个单独的列表来记录哪些元组的第一个索引已经被使用 [否则这将是显而易见的答案]

最佳答案

试试这个:

set(dict(a).items())

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

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

set() 把它变成你想要的集合

注意:这将为您提供第二个示例,保留最后一个唯一的元组键。如果您想要第一个,则需要采用不同的方法

关于python - 将列表转换为仅基于元组某些值的副本的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55452379/

相关文章:

python - IBM Bluemix Spark : Supplying python dependencies to spark-submit. sh

Python ctypes.BigEndianStructure 无法存储值

python - 按行将列名从 DataFrame 提取到 Series 中

python - 使用 gzip 编码分块下载大文件 (Python 3.4)

python - 在 Python pandas 中,如何存储 value_counts 的列名称?

python-3.x - Python opencv Aruco "No module named ' cv2.aruco'”

算法:检查集合包含的最快方法是什么?

c++ set 输出的元素比它包含的元素多得多

python - 列表理解从元组列表中提取多个字段

python - 如何定义一组变量,以便程序响应列表中的任何项目被调用,python3