[Python] मैं कैसे जांच करूं कि एक ही पास में एक से अधिक कुंजियां हैं?


Answers

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

मैं कुछ ऐसा करना चाहता हूं:

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

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

मुझे यकीन नहीं है कि यह संभव है लेकिन जानना चाहेंगे। :-)




sets का उपयोग करना:

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

वैकल्पिक रूप से:

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



इस बारे में कैसा है:

if all(key in foo for key in ["foo","bar"]):
    # do stuff
    pass



यदि आप चाहते हैं:

  • चाबियों के लिए मूल्य भी प्राप्त करें
  • एक से अधिक dictonary की जांच करें

फिर:

from operator import itemgetter
foo = {'foo':1,'zip':2,'zam':3,'bar':4}
keys = ("foo","bar") 
getter = itemgetter(*keys) # returns all values
try:
    values = getter(foo)
except KeyError:
    # not both keys exist
    pass



जबकि मुझे एलेक्स मार्टेलि के जवाब पसंद हैं, यह मेरे लिए पाइथोनिक प्रतीत नहीं होता है। यही है, मैंने सोचा कि पाइथोनिक होने का एक महत्वपूर्ण हिस्सा आसानी से समझने योग्य है। उस लक्ष्य के साथ, <= समझना आसान नहीं है।

जबकि यह अधिक वर्ण हैं, जबकि कार्ल वोइटलैंड के उत्तर द्वारा सुझाए गए issubset() का उपयोग करना अधिक समझ में आता है। चूंकि वह विधि एक शब्दकोश को तर्क के रूप में उपयोग कर सकती है, इसलिए एक संक्षिप्त, समझने योग्य समाधान है:

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

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

मैं set(('foo', 'bar')) स्थान पर {'foo', 'bar'} का उपयोग करना चाहता हूं, क्योंकि यह छोटा है। हालांकि, यह समझ में नहीं आता है और मुझे लगता है कि ब्रेसिज़ को एक शब्दकोश होने के नाते बहुत आसानी से भ्रमित कर दिया जाता है।




यह सुझाव न दें कि यह ऐसा कुछ नहीं है जिसे आपने नहीं सोचा है, लेकिन मुझे लगता है कि सबसे सरल चीज आमतौर पर सबसे अच्छी होती है:

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