Пајтон спореди два листа на речници

Во овој пост, разгледуваме како да споредиме два списока на речници во Пајтон и исто така да ги испечатиме разликите помеѓу двете списоци.

Методот на споредба ги споредува клучевите и вредности во речниците.

Исто така, редоследот на елементите не е важен кога се споредуваат две списоци со речници во Пајтон.

Споредете список на речници во Пајтон

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] == []

Во горенаведениот код, list_1 и list_2 се еднакви Тоа е, секој речник ги содржи истите ставки (клучеви и вредности) во обете списоци. Редоследот на елементи во секој речник е ирелевантен.

Споредете список со речници - разлики во печатењето

Можеме да отпечатиме и кои ставки од речникот се различни во списоците:

На пример:



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)

Излез:

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

Друг начин да се напише горенаведениот метод е:

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: {diff[:5]}')
return result

Конвертирајте две листи користејќи Pandas DataFrame

Примерот со кодот подолу покажува како да споредувате две списоци користејќи 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: {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