Как я могу предотвратить повторяющиеся записи с вложенными циклами? - PullRequest
0 голосов
/ 30 марта 2020

У меня есть два списка с одинаковыми записями, но разными датами:

update = [[45, datetime.datetime(2019, 11, 14, 0, 0)], [42, datetime.datetime(2019, 11, 14, 0, 0)], [44, datetime.datetime(2019, 11, 13, 0, 0)]]

old = [[45, datetime.datetime(2019, 11, 13, 0, 0)], [42, datetime.datetime(2019, 11, 13, 0, 0)], [44, datetime.datetime(2019, 11, 13, 0, 0)]]

Я хочу добавить записи с обновленной датой в новый список. Вывод желания будет выглядеть так:

updated_urls = [[45, datetime.datetime(2019, 11, 14, 0, 0)],
                [42, datetime.datetime(2019, 11, 14, 0, 0)]]

Однако с моим кодом:

updated_urls = []
for line in alt:
    for l in update:
        if line[0] == l[0]:
            if l[1] > line[1]:
                updated_urls.append(update)

я получаю такой результат:

update_urls=[[[45, datetime.datetime(2019, 11, 14, 0, 0)],
              [42, datetime.datetime(2019, 11, 14, 0, 0)]],
              [[45, datetime.datetime(2019, 11, 14, 0, 0)],
              [42, datetime.datetime(2019, 11, 14, 0, 0)]]]

Я понимаю, что получаю этот результат из-за вложенного l oop, но я не могу придумать решение. Как я могу решить это?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Вы можете использовать набор для хранения записей, которые уже были добавлены в ваш список, а затем проверить его, чтобы избежать дублирования. Вот упрощенный пример

entries= [42,45,42,45]

used = set()

updated = []

for e in entries:
    if not e in used:
        updated.append(e)
        used.add(e)
0 голосов
/ 30 марта 2020

Возможно, вам лучше использовать dict, чем list. Попробуйте:

d_up = dict(update)
d_old = dict(old)
d_old.update(d_up)  # adds or overwrites entries of d_old
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...