根据玩家 ID 和系列键从列表中的字典中删除重复项



我有这样的数据

Datas = 
[{'playerid': 'ABCD2612', 'Series': 'U11', 'Points': [810.0, 360.0, 360.0, 251.25]}
{'playerid': 'CDEF2077', 'Series': 'U13', 'Points': [810.0, 540.0, 270.0, 270.0]}
{'playerid': 'HIJK0140', 'Series': 'U15', 'Points': [810.0, 675.0, 540.0, 540.0]}
{'playerid': 'LMNO0315', 'Series': 'U17', 'Points': [945.0, 810.0, 675.0, 540.0]}
{'playerid': 'ABCD2612', 'Series': 'U11', 'Points': [810.0, 360.0, 360.0, 251.25]}
{'playerid': 'CDEF2077', 'Series': 'U13', 'Points': [810.0, 540.0, 270.0, 270.0]}
{'playerid': 'HIJK0140', 'Series': 'U15', 'Points': [810.0, 675.0, 540.0, 540.0]}
{'playerid': 'LMNO0315', 'Series': 'U17', 'Points': [945.0, 810.0, 675.0, 540.0]}]

我需要根据玩家ID和系列从数据中删除重复项

输出如下所示

output = 
[{'playerid': 'ABCD2612', 'Series': 'U11', 'Points': [810.0, 360.0, 360.0, 251.25]}
{'playerid': 'CDEF2077', 'Series': 'U13', 'Points': [810.0, 540.0, 270.0, 270.0]}
{'playerid': 'HIJK0140', 'Series': 'U15', 'Points': [810.0, 675.0, 540.0, 540.0]}
{'playerid': 'LMNO0315', 'Series': 'U17', 'Points': [945.0, 810.0, 675.0, 540.0]}]

感谢您的贡献

使用set和简单的迭代。

前任:

data = [{'playerid': 'ABCD2612', 'Series': 'U11', 'Points': [810.0, 360.0, 360.0, 251.25]},
{'playerid': 'CDEF2077', 'Series': 'U13', 'Points': [810.0, 540.0, 270.0, 270.0]},
{'playerid': 'HIJK0140', 'Series': 'U15', 'Points': [810.0, 675.0, 540.0, 540.0]},
{'playerid': 'LMNO0315', 'Series': 'U17', 'Points': [945.0, 810.0, 675.0, 540.0]},
{'playerid': 'ABCD2612', 'Series': 'U11', 'Points': [810.0, 360.0, 360.0, 251.25]},
{'playerid': 'CDEF2077', 'Series': 'U13', 'Points': [810.0, 540.0, 270.0, 270.0]},
{'playerid': 'HIJK0140', 'Series': 'U15', 'Points': [810.0, 675.0, 540.0, 540.0]},
{'playerid': 'LMNO0315', 'Series': 'U17', 'Points': [945.0, 810.0, 675.0, 540.0]}]
seen = set()
res = []
for i in data:
key = (i['playerid'],i['Series'])
if key not in seen:   #Check if playerid & Series in set
res.append(i) 
seen.add(key)
print(res)

输出:

[{'Points': [810.0, 360.0, 360.0, 251.25],
'Series': 'U11',
'playerid': 'ABCD2612'},
{'Points': [810.0, 540.0, 270.0, 270.0],
'Series': 'U13',
'playerid': 'CDEF2077'},
{'Points': [810.0, 675.0, 540.0, 540.0],
'Series': 'U15',
'playerid': 'HIJK0140'},
{'Points': [945.0, 810.0, 675.0, 540.0],
'Series': 'U17',
'playerid': 'LMNO0315'}]

如果您不介意数据顺序,可以使用简单的字典来删除重复的项目:

out = {(x['playerid'], x['Series']):x for x in Datas}.values()

如果要保留原始数据顺序,则必须跟踪项目位置:

out = [x[1] for x in sorted({(x['playerid'], x['Series']):(i, x) for (i, x) in enumerate(Datas)}.values())]

最新更新