Làm cách nào để so sánh 2 giá trị từ điển trong Python?

Toán tử Equal to [==] so sánh hai từ điển và trả về True nếu cả hai từ điển đều bằng nhau, False nếu không

# Python program to compare two dictionaries 
# using == operator

record1 = {'id': 101, 'name': 'Shivang Yadav', 'Age': 21} 
record2 = {'id': 101, 'name': 'Shivang Yadav', 'Age': 21} 
record3 = {'id': 102, 'name': 'Radib Kar', 'Age': 23} 

if record1 == record2: 
	print["record1 is equal to record2"]
else: 
	print["record1 is not equal to record2"]

if record2 == record3: 
	print["record2 is equal to record3"]
else: 
	print["record2 is not equal to record3"]

đầu ra

record1 is equal to record2
record2 is not equal to record3

2] So sánh hai từ điển bằng phương thức DeepDiff[]

Phương thức DeepDiff[] là từ mô-đun "deepdiff" và nó so sánh sự khác biệt giữa hai từ điển [các bộ sưu tập khác cũng vậy] và trả về các giá trị đã thay đổi

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 nghĩ bạn đang hiểu sai về

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
1.
# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
1 được thiết kế để hoạt động với bất kỳ đối tượng nào, ngay cả khi chúng không hỗ trợ toán tử ==. Nói cách khác, NotImplemented trở thành False

>>> "0" == 0
False

Vì vậy,

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
3 trở thành Sai phù hợp với mong đợi của bạn “Hoặc Không được Thực hiện”

PeterL

Tôi không rõ tại sao không có ngữ nghĩa hợp lý?

Hãy xem ngữ nghĩa trong Python 2

  • dict==dict din't care order [ditto trong Python 3]
  • Python 2 dict không đảm bảo trật tự. [Python 3 giữ thứ tự chèn]
  • keys[], values[], items[] có thứ tự nhất quán [ditto trong Python 3]
record1 is equal to record2
record2 is not equal to record3
1

Bạn mong đợi điều gì ở đây? .
Tôi tin rằng không ai nghĩ rằng ngữ nghĩa “True in 1/len[d], False nếu không” là tốt.

Có một số ngữ nghĩa có thể

  • So sánh theo trình tự
  • So sánh dưới dạng bộ
  • So sánh dưới dạng nhiều bộ

Tôi không nghĩ rằng không có điều nào ở trên là ngữ nghĩa mặc định tốt

Tôi nghĩ rằng tài liệu này gây hiểu nhầm đến mức nó sai

mệnh lệnh. các giá trị bình đẳng cuối cùng rơi vào ngữ nghĩa mặc định cho bình đẳng, kiểm tra danh tính

record1 is equal to record2
record2 is not equal to record3
2

lý do d. giá trị[]. = d. các giá trị [] không phải vì các đối tượng giá trị luôn so sánh không bằng nhau, mà bởi vì mỗi khi bạn gọi phương thức, nó sẽ trả về một đối tượng [khác biệt] mới

Liên quan đến vấn đề 12445. các đối tượng giá trị chế độ xem chính tả bị thiếu tp_richcmp và tp_as_number - Trình theo dõi Python, tôi phủ nhận rằng không có ngữ nghĩa có ý nghĩa cho các đối tượng giá trị. Chúng rõ ràng là một túi các đối tượng tùy ý không có thứ tự, không phải là một bộ hay một chuỗi, chỉ là một bộ sưu tập. Chúng ta có thể định nghĩa bình đẳng một cách có ý nghĩa theo hai cách

  • hai đối tượng giá trị bằng nhau nếu chúng chứa các phần tử giống nhau, cùng số lần, theo bất kỳ thứ tự nào;

  • hoặc hai đối tượng giá trị bằng nhau nếu cả hai đều là chế độ xem của cùng một lệnh

Bài kiểm tra thứ hai gần như rẻ như bài kiểm tra danh tính trên chính các đối tượng giá trị. Thay vì

record1 is equal to record2
record2 is not equal to record3
3

chúng tôi trả về

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
4 [ngoại trừ việc dict sở hữu đối tượng giá trị không được hiển thị với mã Python, vì vậy tôi đoán bài kiểm tra này sẽ chỉ có thể được viết bằng C]

Thử nghiệm đầu tiên đắt hơn. Tôi không thể nghĩ làm thế nào để làm bài kiểm tra một cách hiệu quả. Nếu chúng có thể băm được, chúng ta có thể sử dụng Counter[] nhưng không phải lúc nào chúng cũng có thể băm được

PeterL

Điểm hay. Tôi có hai ký tự dữ liệu - các khóa giống nhau - có giá trị nào thay đổi không? .
Vấn đề mà tôi thấy với giá trị bằng nhau trả về

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
5 là nó ngụ ý rằng chúng [các giá trị] khác nhau.
Mặc dù, tôi thừa nhận, trong trường hợp này, việc so sánh trực tiếp các ký tự nói chung sẽ hiệu quả.

Trong trường hợp sử dụng của bạn, "so sánh eo biển của các lệnh" hoặc

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
6 là giải pháp phù hợp

Bất kỳ ngữ nghĩa nào của

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
7 [nhận dạng chính tả, trình tự, tập hợp và nhiều tập hợp] sẽ không hoạt động trong trường hợp này

PeterL

Một ví dụ phức tạp hơn

record1 is equal to record2
record2 is not equal to record3
8

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
8 có nên so sánh bằng không?

Xem xét điều này

a = {   'x' : 1,   'y' : 2,   'z' : 3 }
b = {   'w' : 10,   'x' : 11,   'y' : 2 }
0

Bạn vẫn nghĩ so sánh

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
8 bằng nhau chứ?
Tôi không nghĩ đó là phép so sánh hữu ích.

Vâng, tôi có thể thấy điều đó. Tôi không nghĩ rằng ví dụ của tôi là tốt, nhưng tôi vẫn hiểu ý của bạn.
Và tôi hiểu rằng so sánh mặc định cho các đối tượng là danh tính và đó là lý do tại sao điều này mang lại cho

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
5.

Mặc dù vậy, tôi vẫn lo lắng về sự trở lại của

# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
5 khi so sánh. Tôi nghĩ nó gây hiểu lầm, vì nó ngụ ý rằng nó đang thực hiện một “sự so sánh hợp lý”. Việc nó luôn trả về
# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
5 [ngay cả khi so sánh với self] có thể gây nhầm lẫn. [Tôi hiểu tại sao điều đó lại xảy ra, tôi chỉ đang xem xét liệu nó có hữu ích hay gây nhầm lẫn khi làm điều đó. ] Tôi lưu ý rằng Julian trong Số phát hành 12445 cũng có sự nhầm lẫn tương tự, vì vậy tôi nghi ngờ mình có thể không đơn độc. Có sự khác biệt giữa “không thể so sánh được” và “không giống nhau”. Nhưng thật không may, == trên các giá trị trả về một
# Comparing values. Answer always False. Why?
print[d1.values[] == d1.values[]]  # False; I expected True. Or NotImplemented
print[d1.values[] == d2.values[]]  # False; I expected True. Or NotImplemented
5 [theo suy nghĩ của tôi, ngụ ý không giống nhau] khi ý nghĩa thực sự của nó là “không thể so sánh được”

Tôi lưu ý rằng các tài liệu đưa ra quan điểm về điều này, nhưng đó có thể không phải là nơi đầu tiên ai đó tìm kiếm. Và tôi đang suy nghĩ về một trường hợp sử dụng tốt

Một tùy chọn có thể là tăng

a = {   'x' : 1,   'y' : 2,   'z' : 3 }
b = {   'w' : 10,   'x' : 11,   'y' : 2 }
7, mặc dù điều đó không bình thường và có thể có các vấn đề khác mà tôi không biết. Tôi tự hỏi liệu một
>>> "0" == 0
False
5 có liên quan không?

Ngoài ra, làm các bài kiểm tra mà @rhettinger đã liệt kê?

Vừa thấy @rhettinger thực hiện một cuộc thăm dò trên Twitter về “điều này làm được gì” - rất muốn xem kết quả

câu hỏi

ĐộiSpen210

Vấn đề là kết hợp các giá trị để kiểm tra sự bằng nhau

người hùng biện

Phép tính là O[n**2] là trường hợp tổng quát…

Có phải sự phức tạp của tính toán là lý do chính khiến một phép so sánh bình đẳng có ý nghĩa hơn không được cung cấp?

Làm cách nào để so sánh hai giá trị dict trong Python?

Sử dụng toán tử == để so sánh hai 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 .

Làm cách nào để so sánh các giá trị từ điển với chuỗi trong Python?

Bạn có thể so sánh các chuỗi trong Python bằng cách sử dụng đẳng thức [ == ] và phép so sánh [ < , > ,. = , .

Từ điển có thể có 2 giá trị trong Python không?

Ý tưởng chung. Trong Python, nếu chúng ta muốn từ điển có nhiều giá trị cho một khóa, chúng ta cần lưu trữ các giá trị này trong vùng chứa riêng của chúng trong từ điển . Để làm như vậy, chúng tôi cần sử dụng một vùng chứa làm giá trị và thêm nhiều giá trị của chúng tôi vào vùng chứa đó. Các thùng chứa phổ biến là danh sách, bộ dữ liệu và bộ.

Chủ Đề