如何在一次遍历中检查字典中是否存在多个键?

310 投票
24 回答
188079 浏览
提问于 2025-04-15 13:38

我想做类似这样的事情:

foo = {
    'foo': 1,
    'zip': 2,
    'zam': 3,
    'bar': 4
}

if ("foo", "bar") in foo:
    #do stuff

我该怎么检查一下,foobar这两个东西是否都在字典foo里呢?

24 个回答

47

简单的基准测试工具,适用于三种替代方案。

请根据需要输入你自己的D和Q值


>>> from timeit import Timer
>>> setup='''from random import randint as R;d=dict((str(R(0,1000000)),R(0,1000000)) for i in range(D));q=dict((str(R(0,1000000)),R(0,1000000)) for i in range(Q));print("looking for %s items in %s"%(len(q),len(d)))'''

>>> Timer('set(q) <= set(d)','D=1000000;Q=100;'+setup).timeit(1)
looking for 100 items in 632499
0.28672504425048828

#This one only works for Python3
>>> Timer('set(q) <= d.keys()','D=1000000;Q=100;'+setup).timeit(1)
looking for 100 items in 632084
2.5987625122070312e-05

>>> Timer('all(k in d for k in q)','D=1000000;Q=100;'+setup).timeit(1)
looking for 100 items in 632219
1.1920928955078125e-05
162
if {"foo", "bar"} <= myDict.keys(): ...

如果你还在用Python 2的话,你可以这样做:

if {"foo", "bar"} <= myDict.viewkeys(): ...

如果你用的是一个非常老的Python版本,像是2.6及以下,你可以对字典使用set,不过这样会遍历整个字典来生成集合,这样会比较慢:

if set(("foo", "bar")) <= set(myDict): ...
501

好的,你可以这样做:

>>> if all(k in foo for k in ("foo","bar")):
...     print "They're there!"
...
They're there!

撰写回答