Python - Получить первое значение из словаря с соответствующими ключами - PullRequest
0 голосов
/ 16 октября 2018
d= {'Time': '1', 'Key':'val1'}
d1={'Time':'2', 'Key':'val1'}
d2={'Time':'3', 'Key':'val1'}
d3={'Time':'3', 'Key':'val2'}
d3={'Time':'8', 'Key':'val2'}}

Как распечатать выходные данные в этом формате:

output=[{Time': '1', 'Key':'val1'}, {'Time':'3', 'Key':'val2'}]

Как удалить дублирующиеся значения с помощью одной клавиши, комбинации значений и распечатать первое вхождение комбинации.Спасибо за помощь.

Ответы [ 2 ]

0 голосов
/ 16 октября 2018

Вы также можете собирать элементы в словаре как reduce и добавлять, только если ключ отсутствует:

from functools import reduce

lst =  [
    {'Time': '1', 'Key':'val1'},
    {'Time':'2', 'Key':'val1'},
    {'Time':'3', 'Key':'val1'},
    {'Time':'3', 'Key':'val2'},
    {'Time':'8', 'Key':'val2'}
]

def collect_if_absent(acc, d):
    if d['Key'] not in acc:
        acc[d['Key']] = d
    return acc

res = list(reduce(collect_if_absent, lst, {}).values())
print(res)
# [{'Time': '1', 'Key': 'val1'}, {'Time': '3', 'Key': 'val2'}]

Это должно занять O (п) .

0 голосов
/ 16 октября 2018
lst =  [
    {'Time': '1', 'Key':'val1'},
    {'Time':'2', 'Key':'val1'},
    {'Time':'3', 'Key':'val1'},
    {'Time':'3', 'Key':'val2'},
    {'Time':'8', 'Key':'val2'}
]

Использование цикла for с any

res = []
for i in lst:
    if not any(i['Key'] in x.values() for x in res):
        res.append(i)
    else:
        pass

print(res)
# [{'Time': '1', 'Key': 'val1'}, {'Time': '3', 'Key': 'val2'}]

Может быть сделано с itertools.groupby

res = []
for _, g in groupby(lst, key = lambda x: x['Key']):
    res.append(list(g)[0])

itertools.groupby с пониманием списка и operator.itemgetter

from itertools import groupby
from operator import itemgetter

res = [list(g)[0] for _, g in groupby(lst, key=itemgetter('Key'))]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...