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
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)]
于 2013-10-29T01:23:50.193 回答
2

这应该符合 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')显示它有效。

于 2013-10-29T01:41:43.000 回答