Hướng dẫn check if two lists of dictionaries are equal python - kiểm tra xem hai danh sách từ điển có bằng python không

Giả sử rằng các dicts xếp hàng như trong đầu vào ví dụ của bạn, bạn có thể sử dụng hàm

>>> [(x, y) for x, y in pairs if x != y]
[({'key3': 'EEE', 'key2': 'BBB', 'key1': 'AAA', 'unique_id': '001'}, {'key3': 'EEE', 'key2': 'DDD', 'key1': 'AAA', 'unique_id': '001'})]
0 để có được danh sách các cặp dicts liên quan, sau đó bạn có thể sử dụng
>>> [(x, y) for x, y in pairs if x != y]
[({'key3': 'EEE', 'key2': 'BBB', 'key1': 'AAA', 'unique_id': '001'}, {'key3': 'EEE', 'key2': 'DDD', 'key1': 'AAA', 'unique_id': '001'})]
1 để kiểm tra xem có sự khác biệt không:

>>> list_1 = [{'unique_id':'001', 'key1':'AAA', 'key2':'BBB', 'key3':'EEE'}, 
              {'unique_id':'002', 'key1':'AAA', 'key2':'CCC', 'key3':'FFF'}]
>>> list_2 = [{'unique_id':'001', 'key1':'AAA', 'key2':'DDD', 'key3':'EEE'},
              {'unique_id':'002', 'key1':'AAA', 'key2':'CCC', 'key3':'FFF'}]
>>> pairs = zip(list_1, list_2)
>>> any(x != y for x, y in pairs)
True

Hoặc để có được các cặp khác nhau:

>>> [(x, y) for x, y in pairs if x != y]
[({'key3': 'EEE', 'key2': 'BBB', 'key1': 'AAA', 'unique_id': '001'}, {'key3': 'EEE', 'key2': 'DDD', 'key1': 'AAA', 'unique_id': '001'})]

Bạn thậm chí có thể nhận các phím không khớp với từng cặp:

>>> [[k for k in x if x[k] != y[k]] for x, y in pairs if x != y]
[['key2']]

Có thể cùng với các giá trị liên quan:

>>> [[(k, x[k], y[k]) for k in x if x[k] != y[k]] for x, y in pairs if x != y]
[[('key2', 'BBB', 'DDD')]]

Lưu ý: Trong trường hợp bạn chưa được sắp xếp, bạn cũng có thể làm điều đó một cách dễ dàng: In case you're input lists are not sorted yet, you can do that easily as well:

>>> from operator import itemgetter
>>> list_1, list_2 = [sorted(l, key=itemgetter('unique_id')) 
                      for l in (list_1, list_2)]

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, việc đặt hàng các yếu tố không quan trọng khi so sánh hai 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 mã trên,

>>> [(x, y) for x, y in pairs if x != y]
[({'key3': 'EEE', 'key2': 'BBB', 'key1': 'AAA', 'unique_id': '001'}, {'key3': 'EEE', 'key2': 'DDD', 'key1': 'AAA', 'unique_id': '001'})]
2 và
>>> [(x, y) for x, y in pairs if x != y]
[({'key3': 'EEE', 'key2': 'BBB', 'key1': 'AAA', 'unique_id': '001'}, {'key3': 'EEE', 'key2': 'DDD', 'key1': 'AAA', 'unique_id': '001'})]
3 bằng nhau. Đó là, mỗi từ điển chứa cùng một mục (khóa và giá trị) trong cả hai danh sách. Thứ tự của các yếu tố trong mỗi từ điển là không liên quan.

So sánh danh sách từ điển - Sự khác biệt in

Chúng ta cũng có thể in những mục từ điển nào khác nhau trong danh sách:

Ví dụ:

if __name__ == '__main__':

    list_1 = [
        {'id': '123-abc', 'name': 'Mike', 'age': 40},
        {'id': '123-efg', 'name': 'John', 'age': 24},
        {'id': '123-xyz', 'name': 'Aly', 'age': 35}
    ]

    list_2 = [
        {'id': '123-abc', 'name': 'Mike', 'age': 40},
        {'id': '123-efg', 'name': 'Jon', 'age': 24},
        {'id': '123-xyz', 'name': 'Aly', 'age': 32}
    ]

    for i in list_1:
        if i not in list_2:
            print(i)

Output:

{'id': '123-efg', 'name': 'John', 'age': 24}
{'id': '123-xyz', 'name': 'Aly', 'age': 35}

Một cách khác để viết phương thức trên là:

def compare_two_lists(list1: list, list2: list) -> bool:
    """
    Compare two lists and logs the difference.
    :param list1: first list.
    :param list2: second list.
    :return:      if there is difference between both lists.
    """
    diff = [i for i in list1 + list2 if i not in list1 or i not in list2]
    result = len(diff) == 0
    if not result:
        print(f'There are {len(diff)} differences:\n{diff[:5]}')
    return result

Chuyển đổi hai danh sách bằng cách sử dụng gấu trúc DataFrame

Mã ví dụ dưới đây cho thấy cách so sánh hai danh sách bằng cách sử dụng gấu trúc DataFrame

from pandas import DataFrame
import pandas as pd

def compare_two_lists(list1: list, list2: list) -> bool:
    """
    Compare two lists and logs the difference.
    :param list1: first list.
    :param list2: second list.
    :return:      if there is difference between both lists.
    """
    df1 = pd.DataFrame(list1)
    df2 = pd.DataFrame(list2)
    diff = dataframe_difference(df1, df2)
    result = len(diff) == 0
    if not result:
        print(f'There are {len(diff)} differences:\n{diff.head()}')
    return result

def dataframe_difference(df1: DataFrame, df2: DataFrame) -> DataFrame:
    """
    Find rows which are different between two DataFrames.
    :param df1: first dataframe.
    :param df2: second dataframe.
    :return:    if there is different between both dataframes.
    """
    comparison_df = df1.merge(df2, indicator=True, how='outer')
    diff_df = comparison_df[comparison_df['_merge'] != 'both']
    return diff_df

#Python

Hướng dẫn check if two lists of dictionaries are equal python - kiểm tra xem hai danh sách từ điển có bằng python không


Bạn có thể kiểm tra xem hai từ điển có bằng nhau không?

Bạn có thể sử dụng toán tử == và nó sẽ hoạt động. Tuy nhiên, khi bạn có nhu cầu cụ thể, mọi thứ trở nên khó khăn hơn. Lý do là, Python không có tính năng tích hợp cho phép chúng tôi: So sánh hai từ điển và kiểm tra xem có bao nhiêu cặp bằng nhau.. However, when you have specific needs, things become harder. The reason is, Python has no built-in feature allowing us to: compare two dictionaries and check how many pairs are equal.

Làm cách nào để so sánh danh sách các từ điển?

Trong danh sách các từ điển, bạn cần so sánh từng dict trong danh sách đầu tiên của bạn với mỗi danh sách trong Dict thứ hai của bạn nếu không có cấu trúc trong từ điển. Nếu bạn có một cấu trúc cố định, hãy sắp xếp danh sách các từ điển theo một số cặp giá trị chính và sau đó bắt đầu loại bỏ các văn bản khác nhau.compare each dict in your first list to each list in your second dict if there is no structure in the dictionaries. If you have a fixed structure, sort the list of dictionaries according to some key value pair and then start eliminating the different ones.

Hàm Python so sánh các mục của hai từ điển là gì?

Phương thức so sánh CMP () được sử dụng trong Python để so sánh các giá trị và khóa của hai từ điển.Nếu phương thức trả về 0 nếu cả hai từ điển đều bằng nhau, 1 nếu dic1> dict2 và -1 nếu dict1 cmp() is used in Python to compare values and keys of two dictionaries. If method returns 0 if both dictionaries are equal, 1 if dic1 > dict2 and -1 if dict1 < dict2.

Phương pháp nào của lớp từ điển được sử dụng để trả về tất cả các khóa từ từ điển?

Phương thức Dict.Keys () trong Từ điển Python, trả về một đối tượng Xem hiển thị danh sách tất cả các khóa trong từ điển theo thứ tự chèn.dict. keys() method in Python Dictionary, returns a view object that displays a list of all the keys in the dictionary in order of insertion.