我已经看到了一些类似的答案,但我无法找到针对此案例的具体内容:
我有一个这样的词典列表:
[
{"element":Bla, "version":2, "date":"12/04/12"},
{"element":Bla, "version":2, "date":"12/05/12"},
{"element":Bla, "version":3, "date":"12/04/12"}
]
Run Code Online (Sandbox Code Playgroud)
实际的字典有许多其他键,但我要做的是删除所有具有完全相同的键对值的条目,日期除外.也就是说,删除所有重复项(由于日期不同而不是真正完全重复).在这种情况下,我期望得到的是:
[
{"element":Bla, "version":2, "date":"12/04/12"},
{"element":Bla, "version":3, "date":"12/04/12"}
]
Run Code Online (Sandbox Code Playgroud)
你说在问题中没有提到的词典中有很多其他键.
这是O(n)算法来做你需要的:
>>> seen = set()
>>> result = []
>>> for d in dicts:
... h = d.copy()
... h.pop('date')
... h = tuple(h.items())
... if h not in seen:
... result.append(d)
... seen.add(h)
>>> pprint(result)
[{'date': '12/04/12', 'element': 'Bla', 'version': 2},
{'date': '12/04/12', 'element': 'Bla', 'version': 3}]
Run Code Online (Sandbox Code Playgroud)
h是dict的副本.date密钥已从中删除pop.
然后tuple创建为可添加的可清除类型set.
如果h以前从未见过,我们会将其追加result并添加到seen.补充seen是O(1)以及查找(h not in seen).
最后,result根据定义的h值仅包含唯一元素.