Bạn có thể sử dụng nút giao thông set
:
if not d.viewkeys() & {'amount', 'name'}:
raise ValueError
Trong Python 3, mà muốn được:
if not d.keys() & {'amount', 'name'}:
raise ValueError
vì .keys()
trả một cái nhìn dict bởi de lỗi. Dictionary view objects như được trả về bởi .viewkeys()
(và .keys()
trong Python 3) hoạt động như bộ và kiểm tra giao lộ là rất hiệu quả.
Demo bằng 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
Lưu ý rằng đây kiểm tra thật chỉ khi cả phím bị thiếu. Nếu bạn cần thử nghiệm của bạn để vượt qua nếu hoặc là mất tích, sử dụng:
if not d.viewkeys() >= {'amount', 'name'}:
raise ValueError
mà là False chỉ khi cả phím có mặt:
>>> d = {
... 'name': 'name',
... 'date': 'date',
... 'amount': 'amount',
... }
>>> not d.viewkeys() >= {'amount', 'name'}
False
>>> del d['amount']
>>> not d.viewkeys() >= {'amount', 'name'})
True
Đối với một nghiêm ngặt so sánh (cho phép chỉ hai khóa, không hơn, không kém), trong Python 2, so sánh chế độ xem từ điển với một tập hợp:
if d.viewkeys() != {'amount', 'name'}:
raise ValueError
(Vì vậy, trong Python 3 sẽ là if d.keys() != {'amount', 'name'}
).
Tôi đang bối rối một chút, làm thế nào tôi có thể kiểm tra nếu '{'số lượng', 'tên'}' cả hai có mặt trong 'd'? – daydreamer
@daydreamer: 'd.viewkeys()> = {'amount', 'name'}' là 'True' nếu cả hai phím đều hiện diện. –
Tôi cần so sánh nghiêm ngặt, vì vậy tôi tin rằng '>>> d.viewkeys() == {'name', 'amount', 'date'} True' là đủ tốt, bạn nghĩ sao? – daydreamer