Удалите дубликаты из словаря в списке на основе playerid и ключа серии - PullRequest
0 голосов
/ 13 января 2020

У меня есть такие данные

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

спасибо за ваш вклад

Ответы [ 2 ]

5 голосов
/ 13 января 2020

Использование 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'}]
1 голос
/ 14 января 2020

Если вы не возражаете против порядка данных, вы можете использовать простой словарь для удаления дублирующихся элементов:

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())]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...