根据playerid和Series键从列表中的字典中删除重复项

2024-05-17 02:34:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样的数据

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

我需要从基于playerid和Series的数据中删除重复项

输出是这样的

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

谢谢你的贡献


Tags: 数据output贡献pointsseriesdatasu17playerid
2条回答

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

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

使用set和一个简单的迭代

Ex:

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

相关问题 更多 >