猿问

删除Python列表中的重复DECT

删除Python列表中的重复DECT

我有一个字典列表,我想用相同的键和值对删除这些数据集。

关于这份清单:[{'a': 123}, {'b': 123}, {'a': 123}]

我想退货:[{'a': 123}, {'b': 123}]

另一个例子:

关于这份清单:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}, {'a': 123, 'b': 1234}]

我想退货:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]



森林海
浏览 449回答 3
3回答

狐的传说

试试这个:[dict(t) for t in {tuple(d.items()) for d in l}]策略是将字典列表转换为元组列表,其中元组包含字典的项。由于元组可以被散列,所以可以使用set(使用集合理解在这里,更老的python替代方案应该是set(tuple(d.items()) for d in l)),在此之后,从元组重新创建字典。dict.其中:l是原始列表d是列表中的字典之一。t是从字典中创建的元组之一。编辑:如果您想保留顺序,上面的一行将无法工作,因为set不会那么做的。但是,使用几行代码,您也可以这样做:l = [{'a': 123, 'b': 1234},         {'a': 3222, 'b': 1234},         {'a': 123, 'b': 1234}]seen = set()new_l = []for d in l:     t = tuple(d.items())     if t not in seen:         seen.add(t)         new_l.append(d)print new_l示例输出:[{'a': 123, 'b': 1234}, {'a': 3222, 'b': 1234}]注意:可能会出现两个键和值相同的字典,不会产生相同的元组。如果它们经历不同的添加/删除键历史记录,则可能发生这种情况。如果您的问题是这样的,那么考虑排序d.items()正如他所建议的。

慕娘9325324

另一条-基于清单理解的班轮:>>> d = [{'a': 123}, {'b': 123}, {'a': 123}]>>> [i for n, i in enumerate(d) if i not in d[n + 1:]][{'b': 123}, {'a': 123}]既然我们可以用dict比较而言,我们只保留未在初始列表的其余部分中的元素(此概念仅可通过索引访问)。n,因此使用了enumerate).

慕的地10843

有时旧的循环仍然很有用。这段代码略长于jcorado的代码,但很容易读懂:a = [{'a': 123}, {'b': 123}, {'a': 123}]b = []for i in range(0, len(a)):     if a[i] not in a[i+1:]:         b.append(a[i])
随时随地看视频慕课网APP

相关分类

Python
我要回答