2012-06-15 50 views
5

tôi đọc "Python Cookbook" và xem những gì trong một công thức "Tìm giao điểm của hai điển" tác giả khuyên bạn sử dụng như một lớp lót:Không has_key() cho Python 3 từ điển

filter(another_dict.has_key, some_dict.keys()) 

Nhưng kể từ Python 3 từ điển không có phương thức has_key() làm cách nào để sửa đổi mã được đề xuất? Tôi cho rằng có thể có một số __() phương thức nội bộ hoặc một cái gì đó như thế này.

Bất kỳ ý tưởng nào, vui lòng?

Trả lời

17

Python 3 có chế độ xem khóa từ điển thay vào đó, một khái niệm mạnh mẽ hơn nhiều. Mã của bạn có thể được viết là

some_dict.keys() & another_dict.keys() 

bằng Python 3.x. Điều này trả về các khóa chung của hai bộ từ điển làm một bộ.

Điều này cũng có sẵn trong Python 2.7, sử dụng phương pháp dict.viewkeys().

Như một trận đấu chặt chẽ hơn của mã ban đầu, bạn cũng có thể sử dụng một danh sách hiểu:

[key for key in some_dict if key in another_dict] 

Một trận đấu thậm chí chặt chẽ hơn của mã ban đầu sẽ được sử dụng dict.__contains__(), đó là phương pháp kỳ diệu tương ứng với in nhà điều hành:

filter(another_dict.__contains__, some_dict.keys()) 

Nhưng vui lòng không sử dụng mã này. Tôi khuyên bạn nên đi với phiên bản đầu tiên, là phiên bản duy nhất làm nổi bật tính đối xứng giữa some_dictanother_dict.

+0

Sự khác nhau giữa 'some_dict.keys() & another_dict.keys()' và 'another_dict.keys() & some_dict.keys()' là gì? –

+2

Không có. Hoạt động giao cắt là giao hoán. – ThiefMaster

+0

Đây là tôi đang tìm kiếm! Cảm ơn nhiều. –

Các vấn đề liên quan