Sử dụng bộ để tìm tất cả các khoản tương đương:
for (key, value) in set(aa.items()) & set(bb.items()):
print '%s: %s is present in both aa and bb' % (key, value)
Nhà điều hành &
đây mang đến cho bạn intersection of both sets; cách khác, bạn có thể viết:
set(aa.items()).intersection(set(bb.items()))
Lưu ý rằng điều này tạo ra bản sao đầy đủ của cả hai dấu gạch ngang vì vậy nếu chúng rất lớn, đây có thể không phải là cách tiếp cận tốt nhất.
Một shortcut sẽ chỉ kiểm tra các phím:
for key in set(aa) & set(bb):
if aa[key] == bb[key]:
print '%s: %s is present in both aa and bb' % (key, value)
Ở đây bạn chỉ sao chép các phím của mỗi dict để giảm bộ nhớ.
Khi sử dụng Python 2.7, loại dict bao gồm additional methods để tạo ra các bộ yêu cầu trực tiếp:
for (key, value) in aa.viewitems() & bb.viewitems():
print '%s: %s is present in both aa and bb' % (key, value)
Đây là những kỹ thuật dictionary views nhưng đối với mục đích của vấn đề này họ hành động như vậy.
Nguồn
2012-05-31 11:08:15
kết quả mong muốn của bạn là gì? Bạn có muốn một giá trị Boolean duy nhất cho biết các phím * all * trong 'aa' cũng xuất hiện trong' bb' có giá trị khớp không? Hoặc một giá trị Boolean cho mỗi khóa? Hoặc một số mã in '' Khoá và giá trị bot khớp với aa và bb "' một lần cho mỗi cặp khóa/giá trị khớp nhau? –
Hmm ... Xem xét vấn đề với cách bạn lặp lại trên 'aa' (gợi ý, nó giống như' aa.iterkeys() '), cách tiếp cận cơ bản của bạn thực sự là tốt. Bạn thực sự muốn cải thiện điều gì? – SingleNegationElimination
Tôi bằng cách nào đó có ấn tượng rằng mọi người khác dường như hiểu những gì Rajeev muốn làm ngay từ đầu. Tuy nhiên, câu trả lời cho những điều hoàn toàn khác nhau… –