我有一个包含一些字典的数组:
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'}]
谢谢!
答案 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'}]