如何使用Djang进行独特的处理

时间:2019-06-07 01:18:50

标签: python python-3.x dictionary

我有一个包含一些字典的数组:

a = [{'name': 'Peter', 'email': '', 'color': 'red'},
 {'name': 'Peter', 'email': '', 'color': 'red'},
 {'name': 'Peter', 'email': '', 'color': 'red'}]

但是我尝试执行此操作:list(set(a)),但不幸的是,我无法做到这一点:

> TypeError: unhashable type: 'dict'

您知道我该如何解决吗?

a = [{'name': 'Peter', 'email': '', 'color': 'red'}]

谢谢!

3 个答案:

答案 0 :(得分:0)

这将解决您的问题:

[dict(t) for t in {tuple(d.items()) for d in a}]

这会将字典列表转换为元组列表,每个元组都包含字典中的项。现在,可以对元组进行哈希处理,这与字典不同。我们使用设定的理解力将其删除。

另一种选择是:

set(tuple(d.items()) for d in a)

哪个返回{(('name', 'Peter'), ('email', ''), ('color', 'red'))},现在您需要重建字典。

答案 1 :(得分:0)

这实际上不是Django问题,而是一般的Python问题。

如果不能迭代任何成员,则不能使用set来获得它们的唯一成员。

一种简单的方法是结合使用itertools.groupby和按每个list的值对外部dict进行排序:

a = [{'name': 'Peter', 'email': '', 'color': 'red'},
 {'name': 'Peter', 'email': '', 'color': 'red'},
 {'name': 'Peter', 'email': '', 'color': 'red'}]

from itertools import groupby

uniques = [key for key, _ in groupby(sorted(a, key=lambda d: tuple(d.values())))]

print(uniques)

输出:

[{'name': 'Peter', 'email': '', 'color': 'red'}]

答案 2 :(得分:0)

您还可以利用字典不能具有重复的相同键的事实。具体来说,您可以使用update

arr = [{'name': 'Peter', 'email': '', 'color': 'red'},
       {'name': 'Peter', 'email': '', 'color': 'red'},
       {'name': 'Peter', 'email': '', 'color': 'red'}]

arr1 = {}
for d in arr:
    for k, v in d.items():
        arr1.update({k: v})
print ([arr1])        
# [{'name': 'Peter', 'email': '', 'color': 'red'}]