Pythonic速记字典中的键?

dav*_*ers 5 python dictionary key

简单问题:是否有用于检查字典中几个键是否存在的简写?

'foo' in dct and 'bar' in dct and 'baz' in dct
Run Code Online (Sandbox Code Playgroud)

unu*_*tbu 8

all(x in dct for x in ('foo','bar','baz'))
Run Code Online (Sandbox Code Playgroud)


Joh*_*web 7

您可以使用all()一个生成器表达式:

>>> all(x in dct for x in ('foo', 'bar', 'qux'))
False
>>> all(x in dct for x in ('foo', 'bar', 'baz'))
True
>>> 
Run Code Online (Sandbox Code Playgroud)

它可以为您节省高达2个字符(如果您有更长的列表需要检查,可以为您节省更多).


fly*_*eep 5

{"foo","bar","baz"}.issubset(dct.keys())
Run Code Online (Sandbox Code Playgroud)

对于python <2.7,你必须用set替换set literal set(["foo","bar","baz"])

如果您喜欢运算符并且不介意创建另一个集合的性能,则可以使用<=集合上的运算符和dict的键集.

两种变化组合如下:

set(["foo","bar","baz"]) <= set(dct)
Run Code Online (Sandbox Code Playgroud)

最后,如果你使用python 3,dict.keys()将返回一个setlike对象,这意味着你可以调用运算符而不会产生如下性能损失:

{"foo","bar","baz"} <= dct.keys()
Run Code Online (Sandbox Code Playgroud)