为了账号安全,请及时绑定邮箱和手机立即绑定

Python-唯一词典列表

Python-唯一词典列表

慕码人2483693 2019-11-08 10:42:45
假设我有一个字典列表:[    {'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中实现这一目标?
查看完整描述

3 回答

?
慕雪6442864

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'}]


查看完整回答
反对 回复 2019-11-08
?
慕妹3146593

TA贡献1820条经验 获得超9个赞

仅查找集合中公共元素的通常方法是使用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()

查看完整回答
反对 回复 2019-11-08
?
拉莫斯之舞

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)))


查看完整回答
反对 回复 2019-11-08
  • 3 回答
  • 0 关注
  • 416 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信