ホームページ >バックエンド開発 >Python チュートリアル >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 サイトの他の関連記事を参照してください。