我对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
然后我需要获取每个列表并将数据位分配给dict,如下所示:
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对象而不是在现有字典上写入?
答案 0 :(得分:1)
最容易想到的事情是使用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)