set
交差点を使用できます:
if not d.viewkeys() & {'amount', 'name'}:
raise ValueError
Python 3 では、次のようになります。
if not d.keys() & {'amount', 'name'}:
raise ValueError
.keys()
デフォルトでdictビューを返すためです。によって(およびPython 3 で)返されるようなディクショナリ ビュー オブジェクトはセットとして機能し、交差テストは非常に効率的です。.viewkeys()
.keys()
Python 2.7 でのデモ:
>>> d = {
... 'name': 'name',
... 'date': 'date',
... 'amount': 'amount',
... }
>>> not d.viewkeys() & {'amount', 'name'}
False
>>> del d['name']
>>> not d.viewkeys() & {'amount', 'name'}
False
>>> del d['amount']
>>> not d.viewkeys() & {'amount', 'name'}
True
これは、両方のキーが欠落している場合にのみ True をテストすることに注意してください。どちらかが欠落している場合にテストに合格する必要がある場合は、次を使用します。
if not d.viewkeys() >= {'amount', 'name'}:
raise ValueError
これは、両方のキーが存在する場合にのみ False になります。
>>> d = {
... 'name': 'name',
... 'date': 'date',
... 'amount': 'amount',
... }
>>> not d.viewkeys() >= {'amount', 'name'}
False
>>> del d['amount']
>>> not d.viewkeys() >= {'amount', 'name'})
True
厳密な比較( 2 つのキーのみを許可し、それ以上でもそれ以下でもない) を行うには、Python 2 でディクショナリ ビューをセットと比較します。
if d.viewkeys() != {'amount', 'name'}:
raise ValueError
(したがって、Python 3 ではif d.keys() != {'amount', 'name'}
)。