在字典中生成所有可能的组合

时间:2014-05-13 08:53:02

标签: python dictionary

mydict ={1:'All',
 2:'Web',
 4:'Iphone',
 8:'Ipad', 
 16:'Android',
 32:'Iphone-Web',
 64:'Ipad-Web',
 128:'Android-Web',
 256:'Android-Web-Desktop',
 512:'Iphone-Web-Desktop',
 1024:'Ipad-Web-Desktop'}

这是我的字典。如何打印所有可能的组合,如:

 1:'All'
 2:'Web'
 4:'Iphone'
 8:'Ipad'
 16:'Android'
 32:'Iphone-Web'
64:'Ipad-Web'
128:'Android-Web'
256:'Android-Web-Desktop'
512:'Iphone-Web-Desktop'
1024:'Ipad-Web-Desktop'
3:'All-Web'
5: 'All-Iphone'
6: 'Web-Iphone'
7: 'All-Web-Iphone'

等等。需要使用这个想法创建组合

  

sum(keys):' values(key1)-value(key2)'

。此外已经有很少的组合,请将它们视为新设备。组合的最大长度为len(mydict)。我需要它在Python中。感谢。

2 个答案:

答案 0 :(得分:1)

使用two keys打印所有单个结果,然后打印combinations的组合。

from itertools import combinations

for key in mydict:
    print "{}: '{}'".format(key, mydict[key])

for x, y in combinations(mydict, 2):
    print "{}: '{}'".format(x+y, '-'.join((mydict[x], mydict[y])))

<强>已更新

打印所有可能的组合。

from itertools import combinations

for n in range(len(mydict)):
    for combs in combinations(sorted(mydict), n+1):
        print "{}: '{}'".format(sum(combs), '-'.join([mydict[key] for key in combs]))

答案 1 :(得分:0)

我们不知道你在寻找什么,但如果它是你正在寻找的powerset:

from copy import deepcopy
def powerset (id_base=0, prefix="", dictionary=dict(), length=0):
    if length < 0:
        return dict()
    if length == 0:
        return dict((id_base,prefix))
    if len(prefix):
        prefix = prefix + "-"
    this_powerset = dict()
    for key, item in dictionary.items():
        smaller_dictionary = deepcopy(dictionary)
        del smaller_dictionary[key]
        this_powerset = dict(
            powerset( id_base + key,
                      prefix + item,
                      smaller_dictionary,
                      length - 1 ).items()
            + this_powerset.items()
    return this_powerset

运行
the_set = powerset(dictionary = mydict, length = len(mydict))

(附带递归函数的所有exectution时间问题)