Hướng dẫn compare string dictionary python - so sánh chuỗi từ điển python

Tôi hiện đang sử dụng chức năng sau để so sánh các giá trị từ điển và hiển thị tất cả các giá trị không khớp. Có cách nào nhanh hơn hoặc tốt hơn để làm điều đó không?

Nội dung chính ShowShow

  • Làm thế nào để bạn so sánh từ điển trong Python?
  • Có thể sử dụng nhà điều hành trên từ điển không?
  • Việc sử dụng tất cả () bất kỳ () cmp () và sort () trong từ điển là gì?
  • Làm thế nào để bạn kiểm tra xem một giá trị có trong một từ điển không?

match = True
for keys in dict1:
    if dict1[keys] != dict2[keys]:
        match = False
        print keys
        print dict1[keys],
        print  '->' ,
        print dict2[keys]

Chỉnh sửa: Cả hai dicts đều chứa các khóa giống nhau.

Hướng dẫn compare string dictionary python - so sánh chuỗi từ điển python

Dag Høidahl

7.4337 Huy hiệu vàng52 Huy hiệu bạc65 Huy hiệu Đồng7 gold badges52 silver badges65 bronze badges7 gold badges52 silver badges65 bronze badges

Đã hỏi ngày 15 tháng 12 năm 2009 lúc 23:39Dec 15, 2009 at 23:39Dec 15, 2009 at 23:39

ngẫu nhiênThoughTrandomth thinkrandomThoughtrandomThought

5.95315 Huy hiệu vàng54 Huy hiệu bạc71 Huy hiệu Đồng15 gold badges54 silver badges71 bronze badges15 gold badges54 silver badges71 bronze badges

4

Nếu ý định thực sự của câu hỏi là so sánh giữa các dicts (chứ không phải in sự khác biệt), thì câu trả lời là

dict1 == dict2

Điều này đã được đề cập trước đây, nhưng tôi cảm thấy nó hơi chết đuối trong các bit thông tin khác. Nó có thể xuất hiện hời hợt, nhưng so sánh giá trị của dicts có ngữ nghĩa thực sự mạnh mẽ. Nó bao gồm

  • Số phím (nếu chúng không khớp, các dicts không bằng nhau)
  • Tên của các phím (nếu chúng không khớp, chúng không bằng nhau)
  • Giá trị của mỗi khóa (chúng phải là '==', quá)

Điểm cuối cùng một lần nữa xuất hiện tầm thường, nhưng rất thú vị vì điều đó có nghĩa là tất cả những điều này cũng được áp dụng đệ quy cho các dicts lồng nhau. Ví dụ.applies recursively to nested dicts as well. E.g.applies recursively to nested dicts as well. E.g.

 m1 = {'f':True}
 m2 = {'f':True}
 m3 = {'a':1, 2:2, 3:m1}
 m4 = {'a':1, 2:2, 3:m2}
 m3 == m4  # True

Tương tự ngữ nghĩa tồn tại để so sánh danh sách. Tất cả điều này làm cho nó không có trí tuệ để ví dụ: So sánh các cấu trúc JSON sâu, một mình với một "==" đơn giản.

Đã trả lời ngày 12 tháng 4 năm 2011 lúc 12:39Apr 12, 2011 at 12:39Apr 12, 2011 at 12:39

15

Nếu các dicts có các bộ khóa giống hệt nhau và bạn cần tất cả các bản in cho bất kỳ sự khác biệt giá trị nào, bạn không thể làm được gì nhiều; Có thể một cái gì đó như:

diffkeys = [k for k in dict1 if dict1[k] != dict2[k]]
for k in diffkeys:
  print k, ':', dict1[k], '->', dict2[k]

Khá nhiều tương đương với những gì bạn có, nhưng bạn có thể nhận được bản trình bày đẹp hơn bằng cách sắp xếp DiffKeys trước khi bạn lặp trên nó.

Đã trả lời ngày 16 tháng 12 năm 2009 lúc 1:36Dec 16, 2009 at 1:36Dec 16, 2009 at 1:36

Alex Martellialex MartelliAlex MartelliAlex Martelli

827K163 Huy hiệu vàng1204 Huy hiệu bạc1383 Huy hiệu Đồng163 gold badges1204 silver badges1383 bronze badges163 gold badges1204 silver badges1383 bronze badges

1

Bạn cũng có thể sử dụng các bộ cho điều này

>>> a = {'x': 1, 'y': 2}
>>> b = {'y': 2, 'x': 1}
>>> set(a.iteritems())-set(b.iteritems())
set([])
>>> a['y']=3
>>> set(a.iteritems())-set(b.iteritems())
set([('y', 3)])
>>> set(b.iteritems())-set(a.iteritems())
set([('y', 2)])
>>> set(b.iteritems())^set(a.iteritems())
set([('y', 3), ('y', 2)])

Đã trả lời ngày 16 tháng 12 năm 2009 lúc 1:47Dec 16, 2009 at 1:47Dec 16, 2009 at 1:47

John La Rooyjohn La RooyJohn La RooyJohn La Rooy

Phù bằng vàng 287K5151 gold badges359 silver badges500 bronze badges51 gold badges359 silver badges500 bronze badges

2

Uhm, bạn đang mô tả

dict1 == dict2
4 (kiểm tra xem cả hai đều có bằng nhau)

Nhưng những gì mã của bạn làm là

dict1 == dict2
5 (kiểm tra xem tất cả các mục trong dict1 có bằng với các mục trong Dict2)

Đã trả lời ngày 15 tháng 12 năm 2009 lúc 23:45Dec 15, 2009 at 23:45Dec 15, 2009 at 23:45

Jochen Ritzeljochen RitzelJochen RitzelJochen Ritzel

102K30 Huy hiệu vàng196 Huy hiệu bạc191 Huy hiệu Đồng30 gold badges196 silver badges191 bronze badges30 gold badges196 silver badges191 bronze badges

1

Không chắc chắn nếu điều này có ích nhưng trong ứng dụng của tôi, tôi phải kiểm tra xem một từ điển có thay đổi không.

Làm điều này sẽ không hoạt động vì về cơ bản, nó vẫn là cùng một đối tượng:

val={'A':1,'B':2}
old_val=val

val['A']=10
if old_val != val:
  print('changed')

Sử dụng Copy/DeepCopy Works:

import copy
val={'A':1,'B':2}
old_val=copy.deepcopy(val)

val['A']=10
if old_val != val:
  print('changed')

Đã trả lời ngày 28 tháng 4 năm 2016 lúc 8:53Apr 28, 2016 at 8:53Apr 28, 2016 at 8:53

>>> a = {'x': 1, 'y': 2}
>>> b = {'y': 2, 'x': 1}
>>> print a == b
True
>>> c = {'z': 1}
>>> print a == c
False
>>> 

Đã trả lời ngày 15 tháng 12 năm 2009 lúc 23:45Dec 15, 2009 at 23:45Dec 15, 2009 at 23:45

Jochen Ritzeljochen RitzelJochen Ritzelyedpodtrzitko

102K30 Huy hiệu vàng196 Huy hiệu bạc191 Huy hiệu Đồng30 gold badges196 silver badges191 bronze badges2 gold badges36 silver badges39 bronze badges

Không chắc chắn nếu điều này có ích nhưng trong ứng dụng của tôi, tôi phải kiểm tra xem một từ điển có thay đổi không.

dict1 == dict2
0

Làm điều này sẽ không hoạt động vì về cơ bản, nó vẫn là cùng một đối tượng:

dict1 == dict2
1

Sử dụng Copy/DeepCopy Works:

dict1 == dict2
0

Đã trả lời ngày 28 tháng 4 năm 2016 lúc 8:53Apr 28, 2016 at 8:53

Đã trả lời ngày 15 tháng 12 năm 2009 lúc 23:45Dec 15, 2009 at 23:45Dec 15, 2009 at 23:45

3

Jochen Ritzeljochen RitzelJochen Ritzel

https://docs.python.org/3/library/stdtypes.html#dict-views

dict1 == dict2
1

102K30 Huy hiệu vàng196 Huy hiệu bạc191 Huy hiệu Đồng30 gold badges196 silver badges191 bronze badges

Không chắc chắn nếu điều này có ích nhưng trong ứng dụng của tôi, tôi phải kiểm tra xem một từ điển có thay đổi không.

dict1 == dict2
2

Làm điều này sẽ không hoạt động vì về cơ bản, nó vẫn là cùng một đối tượng:Mar 30, 2020 at 16:34

Sử dụng Copy/DeepCopy Works:

dict1 == dict2
3

Đã trả lời ngày 28 tháng 4 năm 2016 lúc 8:53Apr 28, 2016 at 8:53

Jochen Ritzeljochen Ritzelyedpodtrzitko

102K30 Huy hiệu vàng196 Huy hiệu bạc191 Huy hiệu Đồng2 gold badges36 silver badges39 bronze badges12 gold badges96 silver badges132 bronze badges

Đã trả lời ngày 28 tháng 4 năm 2016 lúc 8:53Aug 13, 2015 at 2:32

3

Làm thế nào để bạn so sánh từ điển trong Python?

Jochen Ritzeljochen Ritzeluse the == operator, and it will work.

Có thể sử dụng nhà điều hành trên từ điển 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.you can indeed use the == operator on dictionaries.you can indeed use the == operator on dictionaries.

Việc sử dụng tất cả () bất kỳ () cmp () và sort () trong từ điển là gì?

Các hàm tích hợp như tất cả (), bất kỳ (), len (), cmp (), sort (), v.v. thường được sử dụng với từ điển để thực hiện các tác vụ khác nhau.Trả về đúng nếu tất cả các khóa của từ điển là đúng (hoặc nếu từ điển trống).Trả về true nếu bất kỳ khóa của từ điển là đúng.to perform different tasks. Return True if all keys of the dictionary are True (or if the dictionary is empty). Return True if any key of the dictionary is true.to perform different tasks. Return True if all keys of the dictionary are True (or if the dictionary is empty). Return True if any key of the dictionary is true.

Làm thế nào để bạn kiểm tra xem một giá trị có trong một từ điển không?

Để kiểm tra xem một giá trị có tồn tại trong từ điển không, tức là, nếu một từ điển có/chứa một giá trị, hãy sử dụng phương thức toán tử trong toán tử và giá trị ().Sử dụng không vào để kiểm tra xem giá trị không tồn tại trong từ điển.use the in operator and the values() method. Use not in to check if a value does not exist in a dictionary.use the in operator and the values() method. Use not in to check if a value does not exist in a dictionary.