将dict值从元组更改为set python

时间:2015-04-18 18:42:38

标签: python dictionary combinations

我想将我的dict值改为dict,而不是像现在这样改变元组。我有函数在k-places上返回组合n的i个元素。

from itertools import combinations

def comb(n,k,i):
    if i <= 0 or i > n:
        return None
    d = dict((enumerate(combinations(range(1,n+1),k))))
    return d[i-1]

print(comb(5,3,1))

OUTPUT = (1, 2, 3)

EXPECTED = {1,2,3}

1 个答案:

答案 0 :(得分:4)

您的预期输出是,而不是字典;只需在结果上使用set()

return set(d[i-1])

演示:

>>> from itertools import combinations
>>> def comb(n,k,i):
...     if i <= 0 or i > n:
...         return None
...     d = dict((enumerate(combinations(range(1,n+1),k))))
...     return set(d[i-1])
... 
>>> print(comb(5,3,1))
{1, 2, 3}

要获得可迭代对象的特定迭代,您可以使用itertools.islice() call,而不是生成包含所有结果的字典:

from itertools import combinations, islice

def comb(n, k, i):
    if not (0 > i >= n):
        return None
    d = combinations(range(1, n + 1), k)
    ith_item = next(islice(d, i - 1, None))
    return set(ith_item)

但是有可能更有效的方法来计算k中的n个特定组合而非强制执行。