kiểm tra cho bình đẳng hoạt động tốt như thế này cho dicts python:Kiểm tra xem dict chứa trong dict
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois"}
print(first == second) # Result: True
Nhưng bây giờ dict thứ hai của tôi có chứa một số phím bổ sung Tôi muốn bỏ qua:
first = {"one":"un", "two":"deux", "three":"trois"}
second = {"one":"un", "two":"deux", "three":"trois", "foo":"bar"}
Is có một cách đơn giản để kiểm tra nếu dict đầu tiên là một phần của dict thứ hai, với tất cả các khóa và giá trị của nó?
EDIT 1:
Câu hỏi này được nghi ngờ là một bản sao của How to test if a dictionary contains certain keys, nhưng tôi quan tâm đến việc kiểm tra phím và giá trị của họ. Chỉ chứa các khóa giống nhau không làm cho hai dicts bằng nhau.
EDIT 2:
OK, tôi có một số câu trả lời hiện nay sử dụng bốn phương pháp khác nhau, và đã chứng minh tất cả trong số họ làm việc. Khi tôi cần một quy trình nhanh, tôi đã kiểm tra từng thời gian thực hiện. Tôi tạo ra ba chữ cái giống hệt nhau với 1000 mục, khóa và giá trị là các chuỗi ngẫu nhiên có độ dài 10. Các số second
và third
có một số cặp khóa-giá trị bổ sung và khóa ngoài không phải là third
có giá trị mới. Vì vậy, first
là một tập con của second
, nhưng không phải là third
. Sử dụng mô-đun timeit
với 10000 lần lặp lại, tôi nhận:
Method Time [s]
first.viewitems() <=second.viewitems() 0.9
set(first.items()).issubset(second.items()) 7.3
len(set(first.items()) & set(second.items())) == len(first) 8.5
all(first[key] == second.get(key, sentinel) for key in first) 6.0
tôi đoán phương pháp cuối cùng là chậm nhất, nhưng đó là về địa điểm 2. Nhưng phương pháp 1 nhịp đập tất cả chúng.
Cảm ơn câu trả lời của bạn!
thể trùng lặp của [Làm thế nào để kiểm tra xem một cuốn từ điển chứa một số phím] (http://stackoverflow.com/questions/3415347/how-to-test-if-a-dictionary-contains-certain-keys) – tjati