Python中元组字典键匹配的一个元素

5 投票
3 回答
4149 浏览
提问于 2025-04-16 13:07

如果我有一个字典,比如:

foo = {('foo', 45):5, ('bar', 34):3}

我该如何检查这个元组的一部分呢?

if 'foo' in foo: #should be true
    pass
if 45 in foo: #also should be true

或者用其他的语法也可以。

3 个回答

0

另一种可能的方法是使用列表推导式:

if 'foo' in [key[0] for key in foo]:
  pass
if 45 in [key[1] for key in foo]:
1

你可以使用 operator.concat 来把所有的键合并成一个平坦的结构:

>>> import operator
>>> 'foo' in reduce(operator.concat, foo.keys())
True

...或者其他的:

any('foo' in t for t in foo.keys())
7
>>> foo = {('foo', 45): 5, ('bar', 34): 3}    
>>> any(t1 == "foo" for (t1, t2) in foo)
True    
>>> any(t2 == 45 for (t1, t2) in foo)
True

如果你不知道值在哪里,可以直接检查整个数据对。

>>> any(45 in pair for pair in foo)
True

你也可以使用生成器的方法(扁平化):

>>> 45 in flatten(foo)
True

不过,最好的办法可能是构建你的数据,这样你就可以在 O(1) 的时间内检查这种包含关系(比如用集合?或者重构一下字典?)

撰写回答