在字典中查找符合特定条件的集合

时间:2013-05-24 04:39:23

标签: python dictionary lookup

我有一本字典。如果V在DICT [K]中,则someFunc(k,v)和someFunc(v,k)都返回true(并且K在DICT [V]中)。字典可能如下所示:

{
1: [2, 3, 5],
2: [3, 1, 5],
3: [1, 2],
5: [2, 1],
}

我想在字典中找到符合此条件的一定长度的所有数字集:someFunc(x,y)和someFunc(y,x)对于字典中的任何对都必须为true。例如,对于我显示的词典:

{1,2,3}将是有效长度3集。标准必须有效,因为所有项目都包含所有其他项目:

  • dict [1]包含2,3
  • dict [2]包含1,3
  • dict [3]包含1,2

如果我知道所有有效集必须包含给定数字,那么在给定字典中查找给定长度的所有此类集合的最佳方法是什么。

1 个答案:

答案 0 :(得分:1)

from itertools import combinations
from collections import OrderedDict

def sf(k,v,d):
    return (k in d[v]) and (v in d[k])

def lenN(d, n):
    # create a list of unique items
    l = list(OrderedDict.fromkeys(i for x in d for i in d[x]))
    # collect matching groups
    V = list()
    for C in combinations(l, n):
        for P in combinations(C, 2):
            if not sf(P[0], P[1], d): break
        else: V.append(C)
    return V

d = { 1: [2, 3, 5], 2: [3, 1, 5], 3: [1, 2], 5: [2, 1], }

print lenN(d, 3)

<强>输出

[(2, 3, 1), (2, 5, 1)]