次のような口述があるとします。
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 をシャッフルできることです。これを行う簡単な方法はありますか?
次のような口述があるとします。
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 をシャッフルできることです。これを行う簡単な方法はありますか?
これは、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')
出力を提供し、それが機能することを示しました。