3 回答
TA贡献1812条经验 获得超5个赞
因此,以密钥为临时做出决定id。这将滤除重复项。在values()该字典中会列表
在Python2.7中
>>> L=[
... {'id':1,'name':'john', 'age':34},
... {'id':1,'name':'john', 'age':34},
... {'id':2,'name':'hanna', 'age':30},
... ]
>>> {v['id']:v for v in L}.values()
[{'age': 34, 'id': 1, 'name': 'john'}, {'age': 30, 'id': 2, 'name': 'hanna'}]
在Python3中
>>> L=[
... {'id':1,'name':'john', 'age':34},
... {'id':1,'name':'john', 'age':34},
... {'id':2,'name':'hanna', 'age':30},
... ]
>>> list({v['id']:v for v in L}.values())
[{'age': 34, 'id': 1, 'name': 'john'}, {'age': 30, 'id': 2, 'name': 'hanna'}]
在Python2.5 / 2.6中
>>> L=[
... {'id':1,'name':'john', 'age':34},
... {'id':1,'name':'john', 'age':34},
... {'id':2,'name':'hanna', 'age':30},
... ]
>>> dict((v['id'],v) for v in L).values()
[{'age': 34, 'id': 1, 'name': 'john'}, {'age': 30, 'id': 2, 'name': 'hanna'}]
TA贡献1820条经验 获得超9个赞
仅查找集合中公共元素的通常方法是使用Python的set
类。只需将所有元素添加到集合中,然后将集合转换为,然后list
重复项就消失了。
当然,问题在于a set()
只能包含可哈希的条目,而a dict
不可哈希。
如果遇到此问题,我的解决方案是将每个dict
字符串转换为代表的字符串dict
,然后将所有字符串添加至,然后将set()
字符串值读出为,list()
然后转换回dict
。
dict
JSON格式很好地表示了字符串形式。而且Python有一个内置的JSON模块(json
当然也称为)。
剩下的问题是,中的元素dict
没有排序,当Python将转换dict
为JSON字符串时,您可能会得到两个JSON字符串,它们表示等效字典,但不是相同的字符串。一种简单的解决方案是在调用sort_keys=True
时传递参数json.dumps()
。
TA贡献1820条经验 获得超10个赞
您可以使用numpy库(仅适用于Python2.x):
import numpy as np
list_of_unique_dicts=list(np.unique(np.array(list_of_dicts)))
要使其与Python 3.x(以及最新版本的numpy)一起使用,您需要将dict数组转换为numpy字符串数组,例如
list_of_unique_dicts=list(np.unique(np.array(list_of_dicts).astype(str)))
添加回答
举报