如果我有如下的字典:
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 可以洗牌,直到满足标准。有没有一种简单的方法可以做到这一点?
d = {"1,2" : 3, "1,3" : 6, "1,4" : 5,
"2,3" : 5, "2,4" : 6,
"3,4" : 9,}
import itertools
for item in itertools.combinations(d.keys(), 3):
if d[item[0]] < d[item[1]] == d[item[2]]:
print d[item[0]], d[item[1]], d[item[2]]
输出
5 6 6
3 6 6
使用列表理解:
import itertools
print [(d[item[0]], d[item[1]], d[item[2]])
for item in itertools.combinations(d.keys(), 3)
if d[item[0]] < d[item[1]] == d[item[2]]]
输出
[(5, 6, 6), (3, 6, 6)]
这应该符合 OP 的要求,但可能不是他们需要的。编辑:现在只有一个循环
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')
显示它有效。