Обновить дубликаты полей на основе ключа в словаре списка - PullRequest
0 голосов
/ 10 мая 2019

Данный список

l = [
    {
        "URL": "https://www.nytimes.com/",
        "ACTION": "FOLLOW",
        "RESULTS": "/PAGES/222437976487981212229928695878437391142.png",
        "PAGE-UUID": 2.224379764879812e+38,
        "PARENT-UUID": 2.224379764879812e+38
    },
    {
        "URL": "https://www.nytimes.com/es/",
        "ACTION": "NEW",
        "RESULTS": "/PAGES/138695820074592921946528124297895673746.png",
        "PAGE-UUID": 138695820074592921946528124297895673746,
        "PARENT-UUID": 2.224379764879812e+38
    },
    {
        "URL": "https://www.nytimes.com/",
        "ACTION": "NEW",
        "RESULTS": "/PAGES/166947399632926520629187111715759306140.png",
        "PAGE-UUID": 166947399632926520629187111715759306140,
        "PARENT-UUID": 2.436661515947743e+38
    },
    {
        "URL": "https://www.nytimes.com/subscriptions/Multiproduct/lp3L3W6.html?campaignId=6W74R",
        "ACTION": "NEW",
        "RESULTS": "/PAGES/299203350572384506529421004856026300297.png",
        "PAGE-UUID": 299203350572384506529421004856026300297,
        "PARENT-UUID": 2.436661515947743e+38
    }
]

Я хочу иметь возможность проверять наличие записей с тем же «URL», если дубликат найден, обновить дублированное поле «ДЕЙСТВИЕ» на значение «DUPLICATE» вместо нового.В этом случае URL "https://www.nytimes.com/" появляется несколько раз. Ожидаемый результат будет примерно таким:

l = [
        {
            "URL": "https://www.nytimes.com/",
            "ACTION": "FOLLOW",
            "RESULTS": "/PAGES/222437976487981212229928695878437391142.png",
            "PAGE-UUID": 2.224379764879812e+38,
            "PARENT-UUID": 2.224379764879812e+38
        },
        {
            "URL": "https://www.nytimes.com/es/",
            "ACTION": "NEW",
            "RESULTS": "/PAGES/138695820074592921946528124297895673746.png",
            "PAGE-UUID": 138695820074592921946528124297895673746,
            "PARENT-UUID": 2.224379764879812e+38
        },
        {
            "URL": "https://www.nytimes.com/",
            "ACTION": "DUPLICATE",
            "RESULTS": "/PAGES/166947399632926520629187111715759306140.png",
            "PAGE-UUID": 166947399632926520629187111715759306140,
            "PARENT-UUID": 2.436661515947743e+38
        },
        {
            "URL": "https://www.nytimes.com/subscriptions/Multiproduct/lp3L3W6.html?campaignId=6W74R",
            "ACTION": "NEW",
            "RESULTS": "/PAGES/299203350572384506529421004856026300297.png",
            "PAGE-UUID": 299203350572384506529421004856026300297,
            "PARENT-UUID": 2.436661515947743e+38
        }
    ]

Я пытался использовать set, не мог полностью понять, куда я пойду отсюда:

    seen = set()
    new_l = []
    for d in l:
        t = tuple(d.items())
        print "This is t", t
        if t not in seen:
            seen.add(t)
            new_l.append(d)

1 Ответ

0 голосов
/ 10 мая 2019

Вы были близки!

urls = set()
for d in l:
    if d['URL'] in urls: # A duplicate!
        d['ACTION'] = 'DUPLICATE'
    else: # Not seen before
        ulrs.add(d['URL'])
...