Python-唯一词典列表

假设我有一个字典列表:


[

    {'id': 1, 'name': 'john', 'age': 34},

    {'id': 1, 'name': 'john', 'age': 34},

    {'id': 2, 'name': 'hanna', 'age': 30},

]

并且我需要获取唯一字典的列表(删除重复项):


[

    {'id': 1, 'name': 'john', 'age': 34},

    {'id': 2, 'name': 'hanna', 'age': 30},

]

谁能以最有效的方式帮助我在Python中实现这一目标?


慕码人2483693
浏览 417回答 3
3回答

慕雪6442864

因此,以密钥为临时做出决定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'}]

慕妹3146593

仅查找集合中公共元素的通常方法是使用Python的set类。只需将所有元素添加到集合中,然后将集合转换为,然后list重复项就消失了。当然,问题在于a set()只能包含可哈希的条目,而a dict不可哈希。如果遇到此问题,我的解决方案是将每个dict字符串转换为代表的字符串dict,然后将所有字符串添加至,然后将set()字符串值读出为,list()然后转换回dict。dictJSON格式很好地表示了字符串形式。而且Python有一个内置的JSON模块(json当然也称为)。剩下的问题是,中的元素dict没有排序,当Python将转换dict为JSON字符串时,您可能会得到两个JSON字符串,它们表示等效字典,但不是相同的字符串。一种简单的解决方案是在调用sort_keys=True时传递参数json.dumps()。

拉莫斯之舞

您可以使用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)))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python