如何从 Python 列表中删除重复的字典(带有嵌套字典)?

Hil*_*ell 3 python dictionary list set duplicates

我有一个包含嵌套字典的字典列表,如下所示:

v0 = [ { 'a': 1, 'b': { 'c': 3 } },
       { 'a': 1, 'b': { 'c': 3 }, 'd': 4 },
       { 'a': 1 },
       { 'a': 1, 'b': { 'c': 3 } } ]
Run Code Online (Sandbox Code Playgroud)

如何删除重复的列表元素,结果如下:

v1 = [ { 'a': 1, 'b': { 'c': 3 } },
       { 'a': 1, 'b': { 'c': 3 }, 'd': 4 },
       { 'a': 1 } ]
Run Code Online (Sandbox Code Playgroud)

我不关心顺序,我只想要所有元素的集合。我见过很多类似的问题,但答案仅适用于列表中的简单字典,不适用于嵌套字典。例如:

v1 = [dict(t) for t in set([tuple(d.items()) for d in v0])]
Run Code Online (Sandbox Code Playgroud)

如果字典没有嵌套,这将起作用,但因为它们是嵌套的,所以我收到错误“TypeError: unhashable type: 'dict'”

wim*_*wim 5

>>> v0 = [ { 'a': 1, 'b': { 'c': 3 } },
...        { 'a': 1, 'b': { 'c': 3 }, 'd': 4 },
...        { 'a': 1 },
...        { 'a': 1, 'b': { 'c': 3 } } ]
>>> out = []
>>> for v in v0:
...     if v not in out:
...         out.append(v)
...         
>>> out
[{'a': 1, 'b': {'c': 3}}, {'a': 1, 'b': {'c': 3}, 'd': 4}, {'a': 1}]
Run Code Online (Sandbox Code Playgroud)