首页 > 解决方案 > 字典更新替换原始值

问题描述

每当我收到一个新的网址时,我都会尝试将它与当前时间一起添加到我的字典中。但是,当我使用该update()方法时,它会用我添加的新值替换原始值,因此现在字典中唯一的内容是新值(而不是旧值)。

这是我的代码的较短版本:

    if domain not in lst:
        lst.append(domain)
        domaindict = {} 
        listofdomains.append(domaindict)
        domaindict.update({domain:datetime.now().strftime('%m/%d/%Y %H:%M:%S')})
    if domain in lst:
        domindex = lst.index(domain) 
        listofdomains[domindex].update({domain:datetime.now().strftime('%m/%d/%Y %H:%M:%S')})

lst是到目前为止的域名列表listofdomains而是包含各个域的所有字典的列表(每个字典都有域名加上时间)。

当我尝试打印域列表时:

print(listofdomains)

它只打印出字典中新添加的域和 url。我还尝试使用其他方法来更新字典,如该问题的答案中所述,但我的字典仍然无法正常运行。

为什么原来的键/值对消失了?

标签: pythonpython-3.xlistdictionary

解决方案


最简单的结构可能是列表的字典:

data = {domain1:[time1, time2, ...], domain2:[...] ...}

您可以简单地使用 defaultdict 来构建它,它会在需要时动态创建空列表。您的代码将是:

from collections import defaultdict

data = defaultdict(list)

你的整个代码变得简单:

data[domain].append(datetime.now().strftime('%m/%d/%Y %H:%M:%S'))

推荐阅读