我对 python 脚本感到非常头疼。
它基本上加载一个类似于 txt 文件的 DNS 区域,如下所示:
name.com 3600 MX ns1.google.com
name1 3600 A 1.2.3.4
我将此文件加载到 python 中,循环遍历每一行并将每一行转换为列表,因此上面的数据将如下所示:
[["name.com", "3600", "MX", "ns1.google.com"],["name1","3600","A","1.2.3.4"]] etc
然后我需要获取每个列表并将数据位分配给字典,如下所示:
for each_list in data:
terrarecord[each_list[0].replace('.', '') + str(self.random)] = {
"zone_id": self.zone_id,
"name": each_list[0] + self.url,
"type": each_list[2],
"ttl": each_list[1],
"records": [each_list[3].replace('\n', '')]
}
对于上面的示例文本文件来说,一切都很好。但是,如果我有一个包含如下重复条目的区域文件,则此循环会覆盖它们,从而导致各种破坏。
name.com 3600 MX ns1.google.com
name1 3600 A 1.2.3.4
name1 2000 A 1.2.2.2 # <--- this will overwritten
如何编写这个循环,以便每次都创建一个新的 dict 对象,而不是覆盖现有的字典?
最佳答案
想到的最简单的事情就是将 defualtdict
与 list
一起使用。就像这样:
from collections import defaultdict
...
terrarecord = defaultdict(list)
...
terrarecord[each_list[0].replace('.', '') + str(self.random)].append({
"zone_id": self.zone_id,
"name": each_list[0] + self.url,
"type": each_list[2],
"ttl": each_list[1],
"records": [each_list[3].replace('\n', '')]
})
结果将是每个键都与一个值列表相关联,其顺序与输入的顺序相同。如果您特别需要一个常规字典,您可以随时将其转换回来,如下所示:
terrarecord = dict(terrarecord)
关于python - 我正在从具有重复值的文件创建一个字典。如何防止循环覆盖现有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683404/