如何检查Python字典中是否存在多个键?

如何检查Python字典中是否存在多个键?,python,Python,我有以下字典: sites = { 'stackoverflow': 1, 'superuser': 2, 'meta': 3, 'serverfault': 4, 'mathoverflow': 5 } 要检查上述词典中是否有多个键可用,我将执行以下操作: 'stackoverflow' in sites and 'serverfault' in sites 以上内容只需两次键查找即可维护。有没有更好的方法来处理在一个非常大的字典中检查大量键的问题?

我有以下字典:

sites = {
    'stackoverflow': 1,
    'superuser': 2,
    'meta': 3,
    'serverfault': 4,
    'mathoverflow': 5
}
要检查上述词典中是否有多个键可用,我将执行以下操作:

'stackoverflow' in sites and 'serverfault' in sites

以上内容只需两次键查找即可维护。有没有更好的方法来处理在一个非常大的字典中检查大量键的问题?

您可以使用
all

print( all(site in sites for site in ('stackoverflow','meta')) )
# True
print( all(site in sites for site in ('stackoverflow','meta','roger')) )
# False

您计划进行多少次查找?我认为你使用的方法很好


如果有几十个、数百个等项要与之进行比较,则可以将所有目标键放入一个列表中,然后在该列表中迭代,检查以确保每个项都在字典中。

您可以假装dict的键是一个集合,然后使用set.issubset:

set(['stackoverflow', 'serverfault']).issubset(sites) # ==> True

set(['stackoverflow', 'google']).issubset(sites) # ==> False

您不需要
.keys()
,可能不应该使用它。它创建了一个您不需要的列表,并将语句中的
更改为O(n),而不是没有它的O(1)。除此之外,这是一种非常可读的方法,可以获得哪些站点(不是)字典的一部分的列表。+1表示all和生成器表达式,而-1表示
(\uu在站点中)
上的额外参数,以及使用
\u
作为变量名。我意识到无论你使用什么都是一个一次性变量,但作为变量名的
\uu
不知何故只是减慢了我的理解速度。为什么不干脆
all(s in站点中的s in('stackoverflow','meta'))
。与基于集合的解决方案相比,这实际上有一个优势,即无需构建一组要检查的站点列表,并且只要发现第一个不匹配,
all
就会短路。@Paul,谢谢你的评论。我能说什么,但是,我同意!
mysites = ['stackoverflow', 'superuser']
[i for i in mysites if i in sites.keys()]  # ==> sites in the list mysites that are in your dictionary
[i for i in mysites if i not in sites.keys()]  # ==> sites in the list mysites that are not in your dictionary