无法获取设置交集

2024-09-30 01:20:36 发布

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

抱歉,我的双重帖子,如果我不能让事情工作,我会更新这个问题:)

我正在比较两个文件。我将列出两个文件内容:

 File 1                           File 2

"d.complex.1"                     "d.complex.1"

  1                                 4
  5                                 5
  48                                47
  65                                21

d.complex.10                    d.complex.10

  46                                6
  21                                46
 109                               121
 192                               192

我试图比较这两个文件的内容,但不是以一种琐碎的方式。我将用一个例子来解释我想要什么。如果您观察我在上面输入的文件内容,文件_1的d.complex.1有“5”类似于文件_2中的d.complex.1;文件_1中的d.complex.1与文件_2中的d.complex.10没有任何相似之处。我要做的只是打印出那些复杂的d。它和另一个d综合征没有任何相似之处。考虑一下d.complex。如果你想的话,作为标题。但我所要做的就是比较每个d复杂结构下面的数字。如果没有匹配的话,我想要那个特殊的d。从两个要打印的文件中。如果两个复数中都有一个数。两个文件中,我希望它被拒绝。在

我的代码: 我选择的实现这一点的方法是使用集合,然后做一个区别。我写的代码是:

^{pr2}$

上面的代码给出了如下输出(只是一个示例): d、 复杂1.dssp d、 复杂1.dssp 1 48 65岁

^{3}$

109

我想要的是:

d.complex.1
d.complex.1 (name from file2)

d.complex.1
d.complex.10 (name from file2)

我很抱歉把你们弄糊涂了,但这就是所需要的。在

我对python太陌生了,所以我上面的概念可能有缺陷。我也从来没有使用过集:(。有人能帮我一下吗?在


Tags: 文件代码namefrom内容方式事情帖子
2条回答

问题是你用的是交集而不是差:)

如果您使用target_set.difference(target_set_1),您将得到您要查找的结果。在

我不确定我是否完全得到了你想要的,但这就是你想要的吗?在

def complex_file_to_dict(filename):
    out = dict()
    for line in open(filename):
        line = line.strip()
        if line.startswith('d.complex'):
            name = line
            out[name] = set()
        elif line:
            out[name].add(line)

    return out

res_1 = complex_file_to_dict('a.txt')
res_2 = complex_file_to_dict('b.txt')

for k, set_1 in res_1.iteritems():
    print k
    set_2 = res_2.get(k, set())
    for v in set_1 - set_2:
        print v
    print

您需要使用差异而不是交集,因为后者将为您提供两个集合中的项目。也可以使用set1-set2语法。See the python docs for sets。在

我想你是在找这个(感谢原始代码的Rick):

def complex_file_to_dict(filename):
    out = dict()
    for line in open(filename):
        line = line.strip()
        if line.startswith('d.complex'):
            name = line
            out[name] = set()
        elif line:
            out[name].add(line)

    return out

res_1 = complex_file_to_dict('file1.txt')
res_2 = complex_file_to_dict('file2.txt')

for k1, set_1 in res_1.iteritems():
    for k2, set_2 in res_2.iteritems():
      print k1
      print k2
      for v in set_1 - set_2:
        print v
      print

编辑: 您可以将循环更改为:

^{pr2}$

要获得这样的输出:

d.complex.1
d.complex.1 (1, 65, 48)
d.complex.1
d.complex.10 (1, 65, 48)
d.complex.10
d.complex.1 (46, 109, 192)
d.complex.10
d.complex.10 (109, 21)

相关问题 更多 >

    热门问题