如何获取一套词典?

A10*_*010 5 python dictionary set

我有一个字典列表,但其中一些是重复的,我想删除它们(重复项)。

字典的键是一个连续的数字。

示例如下:

[{1: {a:[1,2,3], b: 4}},
{2: {a:[4,5,6], d: 5}},
{3: {a:[1,2,3], b: 4}},
.....,
{1000: {a:[2,5,1], b: 99}},
]

Run Code Online (Sandbox Code Playgroud)

考虑到前面的例子我想获得:

[{1: {a:[1,2,3], b: 4}},
{2: {a:[4,5,6], d: 5}},
.....,
{1000: {a:[2,5,1], b: 99}},
]

Run Code Online (Sandbox Code Playgroud)

事实上,键 1 和键 3 的字典的值是相同的。

我尝试使用一组,但由于 dict 是不可散列的类型,我无法这样做。

我该如何解决这个问题?

编辑

就我而言,字典中的项目数量不固定,所以我可以:

[{1: {a:[1,2,3], b: 4}},
{2: {a:[4,5,6], d: 5}},
.....,
{1000: {a:[2,5,1], b: 99, c:["a","v"]}},
]

Run Code Online (Sandbox Code Playgroud)

其中键为 100 的字典包含三个元素,其中两个元素如图所示。

blh*_*ing 5

为了解决@jdehesa解决方案的限制,where[1, 2]将被视为重复项,您可以通过使用而不是序列化数据结构来(1, 2)保留数据类型。pprint.pformat由于pprint.pformat按键对字典进行排序并按项目对集合进行排序,{1: 2, 3: 4}因此将被正确地视为与 相同{3: 4, 1: 2},但[1, 2]不会被视为与 重复(1, 2):

from pprint import pformat
lst = [
    {1: {'a': [1, 2, 3], 'b': 4}},
    {2: {'a': [4, 5, 6], 'd': 5}},
    {3: {'b': 4, 'a': [1, 2, 3]}},
    {4: {'a': (4, 5, 6), 'd': 5}},
]
seen = set()
output = []
for d in lst:
    for k, v in d.items():
        signature = pformat(v)
        if signature not in seen:
            seen.add(signature)
            output.append({k: v})
Run Code Online (Sandbox Code Playgroud)

output变成:

[{1: {'a': [1, 2, 3], 'b': 4}},
 {2: {'a': [4, 5, 6], 'd': 5}},
 {4: {'a': (4, 5, 6), 'd': 5}}]
Run Code Online (Sandbox Code Playgroud)