Python で順序を維持しながら重複する辞書をリ​​ストから削除する方法は?

DDD
リリース: 2024-11-26 11:05:11
オリジナル
698 人が閲覧しました

How to Remove Duplicate Dictionaries from a List in Python While Preserving Order?

Python でリスト内の重複する辞書を削除する

辞書のリストを操作する場合、同一のキーに基づいて重複を削除する必要がある場合があります。 -値のペア。この記事では、Python の組み込み関数を使用してこれを実現する方法と、辞書の順序を保持するより効率的なアプローチについて詳細なガイダンスを提供します。

重複排除にセットを使用する

1 つのアプローチでは、各辞書を次のように変換します。その項目のタプル。タプルはハッシュ可能であるため、重複する辞書を識別するためのセット内のキーとして使用できます。次の Python コードは、このメソッドを示しています。

new_list = [dict(t) for t in {tuple(d.items()) for d in old_list}]
ログイン後にコピー

このコードは、辞書の元のリスト (old_list) を反復処理し、各辞書内の項目を表すタプルのセットを作成します。セットは重複を自動的に削除します。結果のセットは、辞書内包表記を使用して辞書のリストに変換されます。

カスタム ロジックによる順序の保持

ただし、辞書の順序が重要な場合、上記の方法は適用されません。それを保存します。これを実現するには、次の代替アプローチが推奨されます。

seen = set()
new_list = []
for d in old_list:
    t = tuple(sorted(d.items()))
    if t not in seen:
        seen.add(t)
        new_list.append(d)
ログイン後にコピー

このコードは、各辞書内の順序付けされた項目を表すタプルのセットを作成します。 sorted() 関数は、項目が一貫した順序であることを保証します。その後、このセットは重複したタプルを除外する役割を果たし、結果のリストは元の辞書の順序を保持します。

ネストされた辞書の処理

辞書にネストされた辞書が含まれる場合、提供されるコードは、辞書を平坦化するためにわずかな変更が必要になります。入れ子構造。次のコード スニペットは、これを示しています。

def flatten_dict(d):
    new_d = {}
    for k, v in d.items():
        if isinstance(v, dict):
            v = flatten_dict(v)
            for k2, v2 in v.items():
                new_d[f'{k}.{k2}'] = v2
        else:
            new_d[k] = v
    return new_d

new_list = [dict(t) for t in {tuple(flatten_dict(d).items()) for d in old_list}]
ログイン後にコピー

結論

この記事では、Python のリストから重複した辞書を削除する 2 つの方法を検討しました。重複排除にセットを使用する方法と、元の辞書を保持する方法です。カスタムロジックで注文します。方法の選択は、タスクの特定の要件によって異なります。

以上がPython で順序を維持しながら重複する辞書をリ​​ストから削除する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート