前提・実現したいこと
Pythonのリスト内辞書で重複を削除しようとしています。
キーが同じ時に削除と、キーも値も同じ時に削除する方法を探しています。
B = [{'a':['a', 'b', 'g']}, {'b':['a', 'b', 'g']}, {'b':['a', 'b', 'g']}, {{'b':['g', 'b', 'g']}] #キーも値も同じ時 B = [{'a':['a', 'b', 'g']}, {'b':['a', 'b', 'g']},{{'b':['g', 'b', 'g']}] #キーが同じ時 B = [{'a':['a', 'b', 'g']}, {'b':['a', 'b', 'g']}]
発生している問題・エラーメッセージ
普通のリストは、set()
で重複を削除できるのですが、まずキーも値も同じ時にset()
をリスト内辞書でも使用しようとしたところエラーになりました。
$ python sample.py ['b', 'g', 'a'] Traceback (most recent call last): File "sample.py", line 7, in <module> B = list(set(B)) TypeError: unhashable type: 'dict'
該当のソースコード
python
1A = ['a', 'a', 'b', 'g', 'a'] 2B = [{'a':['a', 'b', 'g']}, {'b':['a', 'b', 'g']}, {'b':['a', 'b', 'g']}] 3 4A = list(set(A)) 5print(A) 6 7B = list(set(B)) 8print(B)
試したこと
以下のように各要素にアクセスして、キーと値の一致を確認して削除することになるのでしょうか。
要素が増えるとアクセスしている配列Bの長さlen(B)
がループを回すごとに変化していくので、より良い方法があれば教えていただきたいです。
[{'a': ['a', 'b', 'g']}, {'b': ['a', 'b', 'g']}]
for i in range(len(B)-1): if B[i].items() == B[i+1].items(): B.remove(B[i]) print(B)
回答3件
あなたの回答
tips
プレビュー