Trong bài đăng này, chúng tôi xem xét cách so sánh hai danh sách từ điển trong Python và cũng in ra sự khác biệt giữa hai danh sách
Phương pháp so sánh so sánh các khóa và giá trị trong từ điển
Ngoài ra, thứ tự của các phần tử không quan trọng khi so sánh hai danh sách từ điển trong Python
So sánh danh sách từ điển trong Python
if __name__ == '__main__':
list_1 = [
{'id': '123-abc', 'name': 'Mike', 'age': 40},
{'name': 'John', 'age': 34, 'id': '123-efg'},
{'age': 32, 'id': '123-xyz', 'name': 'Aly'}
]
list_2 = [
{'name': 'Mike', 'id': '123-abc', 'age': 40},
{'id': '123-efg', 'age': 34, 'name': 'John'},
{'id': '123-xyz', 'name': 'Aly', 'age': 32}
]
assert [i for i in list_1 if i not in list_2] == []
Trong đoạn mã trên,
The common keys are : {'x', 'y'}5 và
The common keys are : {'x', 'y'}6 bằng nhau. Nghĩa là, mỗi từ điển chứa các mục giống nhau [khóa và giá trị] trong cả hai danh sách. Thứ tự của các phần tử trong mỗi từ điển là không liên quan
Trong hướng dẫn này, chúng ta có hai từ điển và muốn tìm ra điểm chung của chúng [chẳng hạn như cùng khóa, cùng giá trị, v.v. ]. Về cơ bản có một số điểm tương đồng giữa hai cuốn từ điển và bạn phải tìm ra những điểm tương đồng này thì bài viết này là hữu ích nhất. VẬY, hãy bắt đầu học cách so sánh hai từ điển trong Python và tìm điểm tương đồng giữa chúng
Điểm tương đồng giữa các từ điển trong Python
Về cơ bản Từ điển là ánh xạ giữa một bộ khóa và giá trị. Các phím hỗ trợ các hoạt động cơ bản như hợp nhất, giao điểm và khác biệt. Khi chúng ta gọi phương thức items[] trong từ điển thì nó chỉ trả về cặp [key, value]
Bây giờ, hãy xem xét hai từ điển
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }
Tìm khóa chung của hai từ điển trong Python
Ở đây, chúng tôi viết một đoạn mã tìm các khóa phổ biến trong hai từ điển như
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 } common_keys = a.keys[] & b.keys[] # intersection operation on keys print["The common keys are :",common_keys]
đầu ra
The common keys are : {'x', 'y'}
Tìm các khóa trong từ điển A không có trong từ điển B
Bây giờ, chúng tôi đang tìm các khóa có trong từ điển a và không có trong từ điển b như
A = { 'x' : 1, 'y' : 2, 'z' : 3 } B = { 'w' : 10, 'x' : 11, 'y' : 2 } diffrent_keys = A.keys[] - B.keys[] print["The key that are in A and not in B are :",diffrent_keys]
đầu ra
The key that are in A and not in B are : {'z'}
Tìm các cặp [khóa, giá trị] phổ biến trong từ điển bằng Python
Bây giờ, chúng tôi thực hiện một thao tác mà chúng tôi đang tìm cặp [khóa, giá trị] phổ biến trong cả hai từ điển như
Tải URL bên ngoài Python trong URL trình duyệt như thế này https. // làm đẹp mã. org/python-formatter-beautifier?url=external-url
Tải dữ liệu Python trong đầu vào URL của trình duyệt như thế này https. // làm đẹp mã. org/python-formatter-beautifier?input=inputdata
Cách dễ nhất để so sánh các từ điển Python chỉ đơn giản là sử dụng cùng một toán tử đẳng thức mà bạn sử dụng trên các loại Python khác, “==”. Điều này hoạt động tốt trong hầu hết các trường hợp, nhưng nó phụ thuộc vào hành vi của “==” đối với các giá trị liên quan. Nếu bạn cần một bài kiểm tra nghiêm ngặt hơn, điều này có thể được thực hiện trong một vài dòng mã
quảng cáoPython nhất quán
Hai trong số những lợi ích của Python là dễ sử dụng và nhất quán. Ví dụ, nó khác với Java, nơi so sánh chuỗi so sánh các tham chiếu đối tượng và bạn phải sử dụng phương thức “bằng” để thực hiện so sánh chuỗi mà bạn muốn thực hiện. Ngược lại, trong Python, phần lớn bạn có thể dựa vào
True
True
True
3 để làm điều đúng trong hầu hết thời gianHãy xem xét đoạn mã sau
string = "Hello"
same_string = "Hello"
number = 3
same_number = 3
boolean = True
same_boolean = True
print[string == same_string]
print[number == same_number]
print[boolean == same_boolean]
đầu ra
True
True
True
Tất nhiên, điều này cũng hiệu quả đối với các trường hợp tiêu cực, như bạn mong đợi.
True
True
True
4 trả về True
True
True
5So sánh từ điển với các loại khác
Python không chỉ phù hợp với các loại đơn giản, nó cũng thực hiện kiểm tra bình đẳng hợp lý cho các loại phức tạp hơn. Hãy xem điều này cho từ điển
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }1
đầu ra
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }2
Vì những gì đang được kiểm tra có lẽ ít rõ ràng hơn một chút so với các loại đơn giản, hãy thử thay đổi các yếu tố khác nhau
Quảng cáoa = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }3
đầu ra
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }4
Ba trường hợp đầu tiên là khá nhiều những gì chúng ta mong đợi. Cái cuối cùng cần một số giải thích
Thận trọng với các loại tương thích bình đẳng
Điều đang xảy ra trong trường hợp cuối cùng là chúng ta đang so sánh một
True
True
True
6 [một số nguyên] với True
True
True
7 [một giá trị dấu phẩy động]. Đằng sau hậu trường, giá trị số nguyên chuyển đổi thành số float, hai số float được so sánh và phép so sánh trả về true. Điều này không liên quan gì đến từ điển - nó chỉ là một thuộc tính của các giá trị được so sánh. theo cùng một cáchQuảng cáoa = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }7
đầu ra
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }2
Điều gì xảy ra nếu chúng ta cần kiểm tra bình đẳng mạnh mẽ hơn?
Nếu chúng ta cần kiểm tra xem các từ điển có bằng nhau không và các loại của tất cả các giá trị có bằng nhau hay không, điều đó tương đối đơn giản trong Python. Đây là một phiên bản của một phương pháp sẽ hoạt động
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }9
Để kiểm tra điều này, chúng ta có thể chạy lại các trường hợp ban đầu của mình, lần này sử dụng hàm thay vì
True
True
True
3. Chúng tôi cũng sẽ kiểm tra thêm một lần nữa các từ điển mà chúng tôi biết là giống nhau để đảm bảo trường hợp đó hoạt độnga = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 } common_keys = a.keys[] & b.keys[] # intersection operation on keys print["The common keys are :",common_keys]1
đầu ra
True
True
True
0Sử dụng “==” cho các Bộ sưu tập Python khác
Như chúng ta đã thấy, cách xử lý bình đẳng của Python đối với từ điển nhất quán với cách xử lý bình đẳng của nó đối với các loại đơn giản như số và chuỗi
Tính nhất quán này cũng mở rộng cho các loại và bộ sưu tập được soạn sẵn khác, cũng như các bộ sưu tập được xác định trong các mô-đun thư viện chuẩn của Python. Ví dụ: ở đây chúng tôi chứng minh rằng nó hoạt động đối với danh sách, bộ, bộ và mảng
Quảng cáoTrue
True
True
1Đầu ra là như chúng ta mong đợi
True
True
True
2Điều gì về các loại do người dùng xác định?
Chủ đề này nâng cao hơn một chút so với những gì chúng ta đang thảo luận, nhưng tôi muốn đưa nó vào cho những độc giả có thể đang tự hỏi: “Làm thế nào đạt được sự nhất quán như vậy? . ”
The answer is, “Yes, you can.”
Mặc dù bạn có thể không cần nó cho các trường hợp đơn giản, nhưng cũng có thể định nghĩa các phương thức trên các lớp do người dùng định nghĩa sẽ cho phép người tiêu dùng thuộc lớp của bạn sử dụng các toán tử so sánh tiêu chuẩn [
True
True
True
3, a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }10,
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }11,
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }12,
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }13,
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }14, v.v. ]. Điều này không được thực hiện trực tiếp thông qua nạp chồng toán tử, như trong C++. Thay vào đó, Python cho phép điều này thông qua các phương thức đặc biệt như
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }15,
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }16,
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }17, v.v. Chúng được gọi là "phương pháp ma thuật" hoặc đôi khi là phương pháp "dunder" [dunder xuất phát từ "dấu gạch dưới kép" ở đầu và cuối mỗi phương thức]
Những phương pháp kỳ diệu như vậy có mặt khắp nơi trong Python và tạo thành một phần quan trọng trong cuốn sách Fluent Python gọi là “mô hình dữ liệu Python”. Trong trường hợp những gì chúng ta đang thảo luận bây giờ, các toán tử so sánh khác nhau, mô-đun
a = { 'x' : 1, 'y' : 2, 'z' : 3 } b = { 'w' : 10, 'x' : 11, 'y' : 2 }18 của Python chứa một lối tắt hữu ích giúp bạn không phải triển khai từng phương thức này một cách riêng lẻ. Có thể chỉ cần xác định hai phương thức như vậy và phần còn lại được thực hiện tự động, sử dụng trình trang trí. Tài liệu Python cho trình trang trí đó chứa một ví dụ hữu ích mà bạn có thể sử dụng làm điểm bắt đầu cho các lớp của riêng mình