So sánh dict Python

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áo

Python 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 gian

Hã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

Quảng cáo
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ả lại
True
True
True
5

So 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

dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)

đầu ra

True

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áo
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}

# Add a key
key_added = dictionary.copy()
key_added["new"] = "New Value"
print(dictionary == key_added)

# Remove a key
key_removed = dictionary.copy()
del(key_removed["attempts"])
print(dictionary == key_removed)

# Change a value
value_changed = dictionary.copy()
value_changed["attempts"] = 2
print(dictionary == value_changed)

# Change type of a value from int to float
value_changed = dictionary.copy()
assert(type_changed["attempts"] == 1)
type_changed["attempts"] = 1.0
print(dictionary == type_changed)

đầu ra

________số 8

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ách

Quảng cáo
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)
1

đầu ra

True

Đ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

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)
3

Để 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 động

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)
5

đầu ra

True
True
True
0

Sử 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áo
True
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,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
0,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
1,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
2,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
3,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
4, 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ư
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
5,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
6,
dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
7, 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

dictionary = {"favorite_website": "https://codesolid.com", "attempts": 1}
same_dictionary = dictionary.copy()

# Comparing simply a matter of using ==, same with other Python types
print(dictionary == same_dictionary)
8 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 triển khai tự động, sử dụng @functools. trang trí total_ordering. 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

Làm cách nào để so sánh 2 dict trong Python?

Sử dụng toán tử == để so sánh hai từ điển .

Có == cho dict 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 .

Làm cách nào để so sánh 2 danh sách trong Python?

Chúng ta có thể kết hợp phương thức sort() của Python với toán tử == để so sánh hai danh sách. Phương thức sort() trong Python được sử dụng để sắp xếp danh sách đầu vào với mục đích nếu hai danh sách đầu vào bằng nhau thì các phần tử sẽ nằm ở cùng vị trí chỉ mục.

Làm cách nào để kiểm tra xem dict có chứa khóa Python không?

Kiểm tra xem khóa có tồn tại hay không bằng cách sử dụng has_key() .