Kiểm tra xem hai từ điển có cùng khóa không python

Từ điển là một biểu diễn cụ thể tốt cho các tập hợp trong Python, vì vậy các phép toán như giao điểm là phổ biến. Giả sử bạn có hai từ điển [nhưng giả sử rằng mỗi từ điển chứa hàng nghìn mục]

some_dict = { 'zope':'zzz', 'python':'rocks' }
another_dict = { 'python':'rocks', 'perl':'$' }

Đây là một cách tồi để tìm giao lộ của họ rất chậm

intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect

Và đây là một cách hay, đơn giản và nhanh chóng

intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect

Trong Python 2. 2, sau đây là thanh lịch và thậm chí nhanh hơn

print "Intersects:", [k for k in some_dict if k in another_dict]

Và đây là một cách tiếp cận thay thế giúp giảm tốc độ, cho Python 1. 5. 2 trở lên

print "Intersects:", filter[another_dict.has_key, some_dict.keys[]]

Phương thức

print "Intersects:", [k for k in some_dict if k in another_dict]
2 tạo danh sách tất cả các khóa của từ điển. Có thể khá hấp dẫn khi rơi vào cái bẫy chỉ sử dụng
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
0, với danh sách này ở phía bên tay phải, để kiểm tra tư cách thành viên. Tuy nhiên, trong ví dụ đầu tiên, bạn đang lặp qua tất cả
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
1, sau đó mỗi lần lặp qua tất cả
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
2. Nếu
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
1 có N1 mục và
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
2 có N2 mục, thao tác giao cắt của bạn sẽ có thời gian tính toán tỷ lệ thuận với tích của N1x N2. [O[N1x N2] là ký hiệu khoa học máy tính phổ biến để biểu thị điều này. ]

Bằng cách sử dụng phương pháp

intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
5, bạn không lặp lại trên
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
2 nữa mà thay vào đó kiểm tra khóa trong bảng băm của từ điển. Thời gian xử lý cho
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
5 về cơ bản không phụ thuộc vào kích thước từ điển, vì vậy cách tiếp cận thứ hai là O[N1]. Sự khác biệt là khá đáng kể đối với các từ điển lớn. Nếu hai cuốn từ điển có kích thước rất khác nhau, điều quan trọng là sử dụng cuốn từ điển nhỏ hơn đóng vai trò là
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
1, trong khi cuốn từ điển lớn hơn đóng vai trò là
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
2 [i. e. , lặp lại các phím của từ điển nhỏ hơn, do đó chọn N1 nhỏ hơn]

Trăn 2. 2 cho phép bạn lặp trực tiếp trên các khóa của từ điển, với câu lệnh

intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
5

Bạn có thể kiểm tra tư cách thành viên với thanh lịch không kém

intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
6

thay vì tương đương nhưng kém hơn về mặt cú pháp

intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
0. Kết hợp hai cải tiến nhỏ nhưng hay này của Python 2. 2 với ký hiệu hiểu danh sách được giới thiệu trong Python 2. 0, chúng tôi kết thúc với một cách tiếp cận rất tao nhã, đồng thời ngắn gọn, rõ ràng và khá nhanh chóng

Tuy nhiên, cách tiếp cận nhanh nhất là cách sử dụng

intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
1 với phương pháp ràng buộc
intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
2 trong danh sách
intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
3. Một giao điểm điển hình của hai từ điển 500 mục với 50% trùng lặp, trên một máy giá rẻ điển hình ngày nay [AMD Athlon 1. 4GHz, RAM DDR2100, Mandrake Linux 8. 1], mất 710 micro giây khi sử dụng
intersect = []
for item in some_dict.keys[  ]:
    if item in another_dict.keys[  ]:
        intersect.append[item]
print "Intersects:", intersect
5, 450 micro giây khi sử dụng Python 2. 2 và 280 micro giây sử dụng cách dựa trên
intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
1. Mặc dù những khác biệt về tốc độ này hầu như là đáng kể, nhưng chúng không đáng kể so với thời gian của đoạn đường xấu, theo đó một giao lộ điển hình mất 22.600 micro giây—dài hơn 30 lần so với cách đơn giản và 80 lần so với cách dựa trên
intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
1. Đây là mã thời gian, cho thấy một ví dụ điển hình về cách một người tiến hành đo tốc độ tương đối của các cấu trúc Python tương đương

intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
4

Bạn có thể lưu mã này vào một tệp

intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
7 và chạy nó [tất nhiên là một vài lần, trên một máy không hoạt động] với
intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
8 để kiểm tra xem thời gian của các cấu trúc khác nhau so sánh như thế nào trên bất kỳ máy cụ thể nào mà bạn quan tâm. [Lưu ý rằng tập lệnh này yêu cầu Python 2. 2 hoặc muộn hơn. ] Định thời gian cho các đoạn mã khác nhau để tìm hiểu tốc độ tương đối của chúng so sánh như thế nào là một kỹ thuật quan trọng của Python, vì trực giác là một hướng dẫn nổi tiếng không đáng tin cậy đối với các phép so sánh tốc độ tương đối như vậy. Để biết hướng dẫn chi tiết và tổng quát về cách tính thời gian, hãy xem phần giới thiệu của Chương 17

Khi có thể áp dụng mà không cần phải sử dụng biểu mẫu

intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
9 hoặc chức năng được viết đặc biệt,
intersect = []
for item in some_dict.keys[  ]:
    if another_dict.has_key[item]:
        intersect.append[item]
print "Intersects:", intersect
1,
print "Intersects:", [k for k in some_dict if k in another_dict]
1 và
print "Intersects:", [k for k in some_dict if k in another_dict]
2 thường đưa ra giải pháp nhanh nhất cho bất kỳ vấn đề nào. Tất nhiên, một Pythonista thông minh chỉ quan tâm đến tốc độ đối với rất, rất ít thao tác mà tốc độ thực sự quan trọng hơn sự rõ ràng, đơn giản và sang trọng. Nhưng những phần mềm tích hợp này cũng khá thanh lịch theo cách riêng của chúng

Chúng tôi không có một công thức riêng cho việc kết hợp các phím của hai từ điển, nhưng đó là bởi vì nhiệm vụ này thậm chí còn dễ dàng hơn, nhờ phương pháp

print "Intersects:", [k for k in some_dict if k in another_dict]
3 của từ điển

Bạn có thể sử dụng == trên từ điển trong Python không?

Theo tài liệu python, bạn thực sự có thể sử dụng toán tử == trên từ điển .

Hai từ điển có thể có cùng khóa không?

Không, mỗi khóa trong từ điển phải là duy nhất. Bạn không thể có hai khóa có cùng giá trị . Cố gắng sử dụng lại cùng một khóa sẽ chỉ ghi đè lên giá trị được lưu trữ trước đó. Nếu một khóa cần lưu trữ nhiều giá trị thì giá trị được liên kết với khóa phải là một danh sách hoặc một từ điển khác.

Hai khóa có thể giống nhau trong từ điển Python không?

Từ điển trong Python . Không cho phép sao chép khóa .

Chủ Đề