【发布时间】:2021-03-19 02:26:15
【问题描述】:
每当我收到一个新的网址时,我都会尝试将它与当前时间一起添加到我的字典中。
但是,当我使用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 是迄今为止的域names 列表,而listofdomains 是包含各个域的所有字典的列表(每个字典都有域名和时间)。
当我尝试打印域列表时:
print(listofdomains)
它只打印字典中新添加的域和网址。我还尝试使用其他方法来更新字典,如this question 的答案中所述,但我的字典仍然无法正常运行。
为什么原来的键/值对消失了?
【问题讨论】:
-
因为你总是使用相同的
domain键,所以你只需替换值。字典中不能有重复的键。您可能应该重新考虑您的数据结构 - 维护两个并行列表可能不是一个好主意... -
根据文档,dict.update 方法用新数据更新字典的内容。因此,字典只包含最后更新的值。如果要生成条目列表,则需要将值添加到字典中,而不是根据键更新。
-
@itprorh66 那我该如何实现呢?
-
@ThierryLathuille 非常感谢!!!!!!!在你告诉我之后,我终于想出了一个解决方案;切换键和值,以便新键不会重复。谢谢!!!
-
这一切都取决于您想要做什么,目前您正在为每个域创建一个字典,其键定义为由
domain:datetime.now().strftime('%m/%d/%Y %H:%M:%S')确定的字符串,没有值。 listofDomains 包含一个字典列表,每个字典都有一个时间字符串键。您试图跟踪什么以及以后访问是什么?
标签: python python-3.x list dictionary