0

次のような口述があるとします。

d = {"1,2" : 3, "1,3" : 6, "1,4" : 5,
          "2,3" : 5, "2,4" : 6,
          "3,4" : 9,}

この基準を満たすすべてのトリプレットを見つけようとしています:

d["a,b"] < d["a,c"] == d["b,c"]

トリッキーな部分は、基準が満たされるまで a、b、および c をシャッフルできることです。これを行う簡単な方法はありますか?

4

2 に答える 2

2

これは、OP が要求したものと一致するはずですが、必要なものではない可能性があります。編集:ループが1つだけになりました

d = {"1,2" : 3, "1,3" : 6, "1,4" : 5,
          "2,3" : 5, "2,4" : 6,
          "3,4" : 9,
      "a,b" : 1, "a,c" : 2, "b,c": 2
    }

parts = set(",".join(d.keys()).split(',')) # Get all parts of the keys
import itertools
for a,b,c in itertools.permutations(parts,3):
    # Get each possible permutation of a,b,c
    try:
        # Try and find an item that matches the condition
        if d[",".join([a,b])] < d[",".join([a,c])] == d[",".join([b,c])]:
            print (a,b,c)
    except KeyError:
        pass # keyerror

問題は、その条件に一致するトリプレットがないため、何も返さないことです。追加のキーのセットを追加して、文字通り('a', 'b', 'c')出力を提供し、それが機能することを示しました。

于 2013-10-29T01:41:43.000 に答える