如何在python字典中获取唯一键和唯一值列表?

如何在python字典中获取唯一键和唯一值列表?,python,dictionary,unique,Python,Dictionary,Unique,很抱歉,如果问题与前面的问题相似,但我找不到任何与我的确切问题相关的答案 我在一个目录中有一组文本文件,我想全部读取并解析它们。文件的格式如下(这意味着文件有一个域的重复ip和一个ip的重复域,还有一对域| ip): 我想要的是一个字典,显示唯一IP及其关联的唯一域数,如下所示: 9.9.9.9,2 23.34.5.1,2 86.45.76.5,1 这是我为它写的脚本 d = defaultdict(set) for dirpath, dirs, files in os.walk(path)

很抱歉,如果问题与前面的问题相似,但我找不到任何与我的确切问题相关的答案

我在一个目录中有一组文本文件,我想全部读取并解析它们。文件的格式如下(这意味着文件有一个域的重复ip和一个ip的重复域,还有一对域| ip):

我想要的是一个字典,显示唯一IP及其关联的唯一域数,如下所示:

9.9.9.9,2
23.34.5.1,2
86.45.76.5,1
这是我为它写的脚本

d = defaultdict(set)

for dirpath, dirs, files in os.walk(path):
    for filename in fnmatch.filter(files, '*.*'):
        with open(os.path.join(dirpath, filename)) as f:
            for line in f:
               if line.startswith('.'):
                    domain = line.split('|')[0]
                    ip = line.split('|')[1].strip('\n')
                    d[ip].add(domain)
但问题是,由于脚本在多个文本文件上运行,如果一个ip(密钥)已从一个文本文件写入字典(d),然后它再次出现在另一个文本文件中,字典将使用如下新值再次写入:

9.9.9.9,1
23.34.5.1,1
86.45.76.5,1
9.9.9.9,2
23.34.5.1,2

我认为更好的方法是将每个ip地址链接到使用它的域列表,而不是捕获最后遇到的域

比如:

现在您可以使用

len(d[ip])

对于任何给定的ip,我认为更好的方法是将每个ip地址链接到使用它的域列表,而不是捕获最后遇到的域

比如:

现在您可以使用

len(d[ip])

对于任何给定的ip,我认为更好的方法是将每个ip地址链接到使用它的域列表,而不是捕获最后遇到的域

比如:

现在您可以使用

len(d[ip])

对于任何给定的ip,我认为更好的方法是将每个ip地址链接到使用它的域列表,而不是捕获最后遇到的域

比如:

现在您可以使用

len(d[ip])

对于任何给定的ip,为什么不使用集合中的计数器类?应该快得多。 因此可以创建空的计数器对象:

c = Counter()
然后用新读取的文件中的数据更新它。
如果文件不是很大,我建议您使用“readlines”方法对文件进行slurp处理,然后使用列表理解一次性处理所有行

为什么不使用集合中的计数器类?应该快得多。 因此可以创建空的计数器对象:

c = Counter()
然后用新读取的文件中的数据更新它。
如果文件不是很大,我建议您使用“readlines”方法对文件进行slurp处理,然后使用列表理解一次性处理所有行

为什么不使用集合中的计数器类?应该快得多。 因此可以创建空的计数器对象:

c = Counter()
然后用新读取的文件中的数据更新它。
如果文件不是很大,我建议您使用“readlines”方法对文件进行slurp处理,然后使用列表理解一次性处理所有行

为什么不使用集合中的计数器类?应该快得多。 因此可以创建空的计数器对象:

c = Counter()
然后用新读取的文件中的数据更新它。
如果文件不是很大,我建议您使用“readlines”方法对文件进行slurp处理,然后使用列表理解一次性处理所有行

谢谢@haraprasadj。但是通过这种方式,这些域将不再是唯一的。因此,唯一IP的问题确实会得到解决,但我也在计算同一个域的IP数量,这是我想要避免的事情。我只需要IP列表和它们关联的唯一域的计数。你对此有什么进一步的建议吗?忘了那个要求,加了一张支票,回答了我的问题。谢谢你,谢谢你。但是通过这种方式,这些域将不再是唯一的。因此,唯一IP的问题确实会得到解决,但我也在计算同一个域的IP数量,这是我想要避免的事情。我只需要IP列表和它们关联的唯一域的计数。你对此有什么进一步的建议吗?忘了那个要求,加了一张支票,回答了我的问题。谢谢你,谢谢你。但是通过这种方式,这些域将不再是唯一的。因此,唯一IP的问题确实会得到解决,但我也在计算同一个域的IP数量,这是我想要避免的事情。我只需要IP列表和它们关联的唯一域的计数。你对此有什么进一步的建议吗?忘了那个要求,加了一张支票,回答了我的问题。谢谢你,谢谢你。但是通过这种方式,这些域将不再是唯一的。因此,唯一IP的问题确实会得到解决,但我也在计算同一个域的IP数量,这是我想要避免的事情。我只需要IP列表和它们关联的唯一域的计数。你对此有什么进一步的建议吗?忘了那个要求,加了一张支票,回答了我的问题。谢谢