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 bằng 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 các 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, list_1
và list_2
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.
So sánh danh sách từ điển - sự khác biệt về bản in
Chúng tôi cũng có thể in các mục từ điển 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)
Đầu ra:
{'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 Pandas 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 Pandas 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