299 votes

python : Comment vérifier que plusieurs clés se trouvent dans un dict en une seule fois ?

Je veux faire quelque chose comme :

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

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

Je ne sais pas si c'est possible mais j'aimerais le savoir :-)

487voto

hughdbrown Points 15770

Eh bien, tu pourrais faire ça :

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

160voto

Alex Martelli Points 330805
if set(("foo", "bar")) <= set(myDict): ...

47voto

gnibbler Points 103484

Banc d'essai simple pour 3 des alternatives.

Introduisez vos propres valeurs pour D et 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

41voto

claytonk Points 1

Vous n'avez pas besoin d'emballer le côté gauche dans un ensemble. Tu peux juste faire ça :

if {'foo', 'bar'} <= set(some_dict):
    pass

27voto

Karl Voigtland Points 5111

Utilisation de fixe :

if set(("foo", "bar")).issubset(foo):
    #do stuff

Alternativement :

if set(("foo", "bar")) <= set(foo):
    #do stuff

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X