2017-03-01 6 views
-1

私が抽出したホスト名に基づいて3つのハッシュを比較する方法が必要です。私は2つを比較する機能を持っていますが、1つの機能で3つの機能をすべて組み合わせることを目指しています。ハッシュを使った3ウェイ比較

すべての変数が以前にキャプチャされ格納されています。これは単なる比較チェックです。

避けることができれば、私はisdiffや他の機能を望んでいません。

3つの結果を比較する必要があります。

results1 = { 'USPN-HS-R3'( 'USPN-HS-R3'、 'アーカイブ\ USPN-HS-r3.cfg'、 '23d516b3f2f438327b1a19fa63868621a87b8c8b「)など.....

これらの値は非常に、したがって比較可能です。文字列はそれを示すために遠くまでです。しかし、この場合のホスト名は、uspn-hs-r3の後に:、その後にそれがあったディレクトリ、続いてハッシュです。

双方向の比較をresults3

results2:

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

関連する問題