我正在从具有重复值的文件创建dict。如何防止循环覆盖现有值?

2024-05-08 15:57:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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对象,而不是在现有字典上编写?你知道吗


Tags: 文件nameselfcom区域zone列表google
1条回答
网友
1楼 · 发布于 2024-05-08 15:57:23

我想到的最简单的事情就是使用defualtdictlist。像这样:

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', '')]
        })

结果是每个键都将与一个值列表相关联,顺序与输入的顺序相同。如果你特别需要一个普通的dict,你可以这样转换它:

terrarecord = dict(terrarecord)

相关问题 更多 >