1

Python 3.8 を使用しています。各要素が辞書である2つのリストがあります...

>>> existing_dicts = [{"id": 1}, {"id": 2}]
>>> cur_dicts = [{"id": 2}]

もともと「existing_dicts」にあった「cur_dicts」になくなった辞書を見つけたかったのです。したがって、上記の例では、

{"id": 1}

「existing_dicts」にあるが「cur_dicts」にはないため、私の望ましい結果です。私は違いを見つけるために以下を試しました...

>>> deleted_dicts = list(set(existing_dicts) - set(cur_dicts))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: unhashable type: 'dict'

これを行うためのより良い方法は何ですか?

4

1 に答える 1

1

リストの辞書要素であるため、セットアプローチは機能していません。辞書のリストをセットにすることは許可されていないようです。

existing_dict代わりに、リスト内の要素が , にあるかどうかをチェックするリスト内包表記を使用できますcur_dicts

 deleted_dicts = [x for x in existing_dicts if not (x in cur_dicts)]

辞書が にない場合はcur_dicts、 に追加されdeleted_dictsます。これは、辞書が演算子と等しいかどうかを比較できるという事実に依存してい==ます。

重複したエントリとより大きな辞書で拡張された完全な例:

existing_dicts = [{"id": 1}, {"id": 2}, {"id": 2}, {"id": 2, "id2" : 3}, {"id": 1, "id2": 2}]
cur_dicts = [{"id": 2}, {"id": 1, "id2": 2}]

deleted_dicts = [x for x in existing_dicts if not (x in cur_dicts)]
print(deleted_dicts)
于 2020-11-06T22:38:07.333 に答える