190 python dictionary
我想做的事情如下:
foo = {'foo':1,'zip':2,'zam':3,'bar':4}
if ("foo","bar") in foo:
#do stuff
Run Code Online (Sandbox Code Playgroud)
如何检查'foo'和'bar'是否都在dict foo中?
hug*_*own 319
好吧,你可以这样做:
>>> if all (k in foo for k in ("foo","bar")):
... print "They're there!"
...
They're there!
Run Code Online (Sandbox Code Playgroud)
Ale*_*lli 112
if set(("foo", "bar")) <= set(myDict): ...
Run Code Online (Sandbox Code Playgroud)
Joh*_*ooy 36
为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
Run Code Online (Sandbox Code Playgroud)
小智 29
您不必将左侧包裹在一组中.你可以这样做:
if {'foo', 'bar'} <= set(some_dict):
pass
Run Code Online (Sandbox Code Playgroud)
这也比all(k in d...)
解决方案更好.
Kar*_*and 22
使用集合:
if set(("foo", "bar")).issubset(foo):
#do stuff
Run Code Online (Sandbox Code Playgroud)
或者:
if set(("foo", "bar")) <= set(foo):
#do stuff
Run Code Online (Sandbox Code Playgroud)
Sho*_*ura 11
我认为这是最聪明和最重要的。
{'key1','key2'} <= my_dict.keys()
Run Code Online (Sandbox Code Playgroud)
这个怎么样:
if all(key in foo for key in ["foo","bar"]):
# do stuff
pass
Run Code Online (Sandbox Code Playgroud)
虽然我喜欢Alex Martelli的回答,但对我来说它似乎并不像Pythonic.也就是说,我认为Pythonic的一个重要部分是易于理解的.有了这个目标,<=
就不容易理解.
虽然它是更多的角色,但issubset()
按照Karl Voigtland的回答使用更容易理解.由于该方法可以使用字典作为参数,因此一个简短易懂的解决方案是:
foo = {'foo': 1, 'zip': 2, 'zam': 3, 'bar': 4}
if set(('foo', 'bar')).issubset(foo):
#do stuff
Run Code Online (Sandbox Code Playgroud)
我想用{'foo', 'bar'}
它代替set(('foo', 'bar'))
,因为它更短.然而,这不是那么容易理解,我认为括号太容易被混淆为字典.
检查字典中是否存在所有键:
{'key_1', 'key_2', 'key_3'} <= set(my_dict)
Run Code Online (Sandbox Code Playgroud)
检查字典中是否存在一个或多个键:
{'key_1', 'key_2', 'key_3'} & set(my_dict)
Run Code Online (Sandbox Code Playgroud)