2017-03-01 41 views
-1

我需要一种方法来根据我提取的主机名比较三种散列。我有一个函数来比较两个函数,但是希望将它合并成一个函数。使用散列的三种方法比较

所有的变量都被捕获并保存。这只是比较检查。

如果可以避免,我不想让我们使用isdiff或其他函数。

需要比较三个结果。

结果1 = { 'USPN-HS-R 3':( 'USPN-HS-R 3', '归档\ USPN-HS-r3.cfg', '23d516b3f2f438327b1a19fa63868621a87b8c8b')”等.....

这些值可以很好地进行比较。字符串很长以显示所有内容。然而,在这种情况下,主机名是uspn-hs-r3,后面是:,然后是它所在的目录,后面是哈希。

结果2 结果3

双向比较:

for hostname, filename, filehash in results1.values(): 
     if hostname in results2: 
      _, filename2, filehash2 = results2[hostname] 
      if filehash != filehash2: 
       print ("%s has a change (%s, %s)" % (
        hostname, filehash, filehash2)) 
       print(filename) 
       print(filename2) 

失败3路:

for hostname, filename, filehash in results1.values(): 
    if hostname in results2 and hostname in results3: 
     _, filename2, filehash2, filename3, filehash3 = results3[hostname] 
     if filehash != filehash2 or filehash != filehash3: 
      print ("%s has a change (%s, %s)" % (
        hostname, filehash, filehash2, filehash3)) 
      print(filename) 
      print(filename2) 
      print(filename3) 
+0

请显示'results1/2/3'的例子,以便我们能够理解它们的结构以及你想要达到的目标。 –

回答

2

你在排队有错误3. result3只有一个大小为3的元组,并且将其解包为5个值。

for hostname, filename, filehash in results1.values(): 
    if hostname in results2 and hostname in results3: 
     _, filename2, filehash2 = results2[hostname] 
     _, filename3, filehash3 = results3[hostname] 
     if filehash != filehash2 or filehash != filehash3: 
      print ("%s has a change (%s, %s, %s)" % (
       hostname, filehash, filehash2, filehash3)) 
      print(filename) 
      print(filename2) 
      print(filename3) 
+0

我认为那样做了。我会运行一些测试来确认,但最初看起来不错。 – NineTail

+0

就是这样,谢谢。 – NineTail