[TOC]
目标
现有字典列表
#
A = [ {dict1}, {dict2} ]
B = [ {dict3}, {dict2} ]
C = [ {dict3}, {dict4} ]
M = [A,B,C]
X = []
将M去重后的字典放入列表X中,得到X = [{dict1}, {dict2},{dict3}, {dict4}]
难点
字典列表
大家可能一开始会想到使用set()函数转化为集合,自动去重。但是集合是使用hash来计算并去重的,但是字典类型无法使用Hash计算。虽然可以使用类class或者命名元组namedtupe来替换字典,但是这次的场景是无法变更列表的产生源的。
列表无集合操作的方法
列表之间无法使用交并差(&,|,-)的方式的集合计算方法
思路
# json,性能差
data = set([json.dumps(d) for d in data])
data = [json.loads(d) for d in data]
# 这种方式只能对ABC生效,对M还需要再一次循环,玛法
sortedlist = []
for item in listwhichneedssorting:
if item not in sortedlist:
sortedlist.append(item)
# 这种缩短了两行
for i in M:
X.extend(filter(lamda s: s not in X, i))
# 使用extend()而不是append(),因为我们需要拼接的是字典列表,而不是列表的列表
# lamda s: s not in X, M 匿名函数,对i中的元素是否在X中进行判断
# filter() 对上面匿名函数中不满足条件(即重复的字典)进行过滤,返回尚未添加到X中的字典元素列表
# 使用extend()进行追加到X中
标签:dict3,dict2,Python,列表,item,data,字典
来源: http://blog.51cto.com/l0vesql/2346778