忽略元组比较中的值但仍然检索它

时间:2018-06-01 17:54:54

标签: python set tuples

我正在使用包含(position, name)格式的元组的集合,并且需要在忽略位置时检查名称集中是否已存在值。

有没有办法可以使用类似于in的{​​{1}}运算符,在比较期间忽略元组中的位置变量,但仍然检索它?类似于value in my_set(_, value) in my_set的内容,但那些不起作用,第一个返回不正确的值,第二个引发SyntaxError。

显然我可以使用像(*, value) in my_set)那样的循环或生成器理解,但是它不会从该元组中检索位置变量,而且我很好奇是否存在某种形式的单行理解会这样做。

1 个答案:

答案 0 :(得分:1)

您可以使用现有数据结构(迭代集合)在O(n)中执行此操作,但对于O(1),您必须更改数据结构。您需要进行查找:

from collections import defaultdict

positions = defaultdict(list)
for position, name in my_set:
    positions[name].append(position)

现在这是一个O(1)操作:

name in positions

按名称检索所有内容:

for pos in positions[name]:
    ...

如果您希望这与my_set突变保持同步,那么您需要在添加/删除positions的同时添加挂钩以更新my_set。完全重新考虑底层数据结构可能更好,例如,首先使用dict而不是set。