python - 字典更新替换原始值
问题描述
每当我收到一个新的网址时,我都会尝试将它与当前时间一起添加到我的字典中。但是,当我使用该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。我还尝试使用其他方法来更新字典,如该问题的答案中所述,但我的字典仍然无法正常运行。
为什么原来的键/值对消失了?
解决方案
最简单的结构可能是列表的字典:
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'))
推荐阅读
- machine-learning - 什么最适合这个模型?
- r - 安排_ggsurvplots 中的常见图例
- date - 脚本日期格式
- python - 正则表达式在一行中以大写单词开头和结尾,在大写单行单词中间有几行
- c++ - 临时对象在 C++ 中的行为如何?
- react-native - 当用户单击 react-native-paper 中的屏幕时如何关闭 Snackbar
- laravel - 如何更改 URL 的结构
- javascript - 我正在将 ajax 请求传递给其他远程服务器以获取访问记录
- sql - 比较列的先前版本
- python - 如何使用 python 从音频 wav 文件中获取 rms?