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中。感谢。
答案 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时间问题)