Python中元组字典键匹配的一个元素
如果我有一个字典,比如:
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) 的时间内检查这种包含关系(比如用集合?或者重构一下字典?)