Pythonの、辞書型のリストの要素をユニークにする
タイトルの通りのことをしたかったのですが、ググっても少し高度なことをやっている記事しか見かけなかったため、少し無理やりではありますが
- 辞書型を文字列に変換
- 文字列をハッシュ値に変換
- ハッシュ値をキーとして辞書型をバリューに入れる
という方法により、実現しました。
実装
import hashlib
hash_dicts = {}
for hoge_dict in hoge_dicts:
dict_str = str(hoge_dict)
hs = hashlib.sha256(str(dict_str).encode()).hexdigest()
hash_dicts[hs] = hoge_dict
# これが得たいリスト
hoge_dicts = list(hash_dicts.values())
注意点
コメントでいただきました通り、
上記実装では文字列にする際に辞書型のキーや、バリューがリストの場合の順序を考慮しないため実態としては同じものなのに別と認識されることがあります。
このため、自前で辞書型を定義していてキーの順序などは守られている場合などにはそのまま使っていただいて構いませんが、その限りではない場合には適宜defaultdictに変換する処理を挟むなどをしていただければと思います。
Author And Source
この問題について(Pythonの、辞書型のリストの要素をユニークにする), 我々は、より多くの情報をここで見つけました https://zenn.dev/yasude/articles/f293bc5644f9719d45e4著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Collection and Share based on the CC protocol