python - 我正在从具有重复值的文件创建一个字典。如何防止循环覆盖现有值?

标签 python loops dictionary text

我对 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 对象,而不是覆盖现有的字典?

最佳答案

想到的最简单的事情就是将 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', '')]
        })

结果将是每个键都与一个值列表相关联,其顺序与输入的顺序相同。如果您特别需要一个常规字典,您可以随时将其转换回来,如下所示:

terrarecord = dict(terrarecord)

关于python - 我正在从具有重复值的文件创建一个字典。如何防止循环覆盖现有值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683404/

相关文章:

python - 如何可靠地将数字的小数部分和浮点部分分开?

python - 如何在 Pandas 组中选择日期范围?

python - 我的 python 循环数据帧随着时间的推移而减慢

Java while 循环不限制范围?

python - 如何在python中为列表的每个元素添加固定键?

python - 将字典列表和变成字典集

python - 为什么将自定义类的 __array_priority__ 设置为高于零会使与 numpy.float64 的比较工作不正确?

python - 附加元音位置 Python

Javascript - 递归循环,同时跟踪父子关系

c# - C# 的 Dictionary<key, value> 的 Java 类版本