Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonは辞書の2つのリストを比較します

この投稿では、Pythonで辞書の2つのリストを比較する方法と、2つのリストの違いを出力する方法について説明します。

比較方法では、キーを比較します。 辞書の値。

また、Pythonで辞書の2つのリストを比較する場合、要素の順序は重要ではありません。

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

上記のコードでは、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:\n{diff[:5]}')
    return result

PandasDataFrameを使用して2つのリストを変換する

以下のサンプルコードは、PandasDataFrameを使用して2つのリストを比較する方法を示しています

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

  1. 2つのPythonリスト要素を追加する

    リストをPythonで追加すると、両方のリストの要素を含む新しいリストが作成されます。 2つのリストを追加するにはさまざまなアプローチがあり、それらについて以下に説明します。ただし、これらすべての場合、リストは同じ長さである必要があります。 Append()の使用 append()を使用して、あるリストの要素を別のリストに追加できます。 例 List1 = [7, 5.7, 21, 18, 8/3] List2 = [9, 15, 6.2, 1/3,11] # printing original lists print ("list1 : " + str(List1))

  2. 2つのPython辞書を1つの式にマージする方法は?

    組み込みの辞書クラスには、引数辞書オブジェクトの要素を呼び出し元の辞書オブジェクトとマージするupdate()メソッドがあります。 >>> a = {1:a, 2:b, 3:c} >>> b = {x:1,y:2, z:3} >>> a.update(b) >>> a {1: a, 2: b, 3: c, x: 1, y: 2, z: 3} Python 3.5以降、2つの辞書をマージする別の構文が利用可能になりました >>> a = {1:a, 2:b, 3:c} >>> b