这是问题所在。我正在创建一个包含abc ... 789的所有组合的列表。我想创建该列表的字典,然后将其发送到地图功能。
def enumerate(length, possibles):
ret = []
if length == 1:
return list(possibles)
else:
subs = enumerate(length -1, possibles)
ret = ret + subs
for ch in possibles:
for sub in subs:
ret.append(str(ch) + str(sub))
return ret
datasource = dict(enumerate(4,"abcdefghijklmnopqrstuvwxyz0123456789"))
我收到了这个错误:
Traceback (most recent call last):
File "ex_passcrack.py", line 27, in <module>
datasource = dict(enumerate(4,"abcdefghijklmnopqrstuvwxyz0123456789"))
ValueError: dictionary update sequence element #0 has length 1; 2 is required
我不知道这意味着什么。任何帮助表示赞赏。
我必须补充这个问题。任何人都可以告诉我如何建立一个类似的字典 {0:&#39; a&#39;,&#39; foo&#39;,1:&#39; b&#39;,&#39; foo&#39;,2:&#39; aa&#39 ;,&#39; foo&#39;,3:&#39; ab&#39;,&#39; foo&#39;,4:&#39; ba&#39;,&#39; foo&#39; ,5:&#39; bb&#39;,&#39; foo&#39;}
如果它看起来不对,我很抱歉(因为我不知道)。我需要每个键都有两个值。
我目前的代码是:
def combos(length, possibles):
ret = []
if length == 1:
return list(possibles)
else:
subs = combos(length -1, possibles)
ret = ret + subs
for ch in possibles:
for sub in subs:
ret.append(str(ch) + str(sub))
return ret
list = combos(2,"ab")
datasource = dict(enumerate(list))
我需要字典:
{0: 'a', 'foo', 1: 'b', 'foo', 2: 'aa', 'foo', 3: 'ab', 'foo', 4: 'ba', 'foo', 5: 'bb', 'foo'}
我正在创建所有这些组合以发送到散列组合的地图函数(为了便于比较,我截断到前五个位置)。我想比较mapfunction中的结果(5位)散列和我在命令行传递的参数(这是散列本身)。
答案 0 :(得分:1)
from itertools import product
def myenumerate(length, possibles):
for i in xrange(length):
for r in product(possibles, repeat=i + 1):
yield "".join(r)
print {
i: [v, 'foo']
for i, v in enumerate(myenumerate(2, "ab"))
}
结果:
{0: ['a', 'foo'], 1: ['b', 'foo'], 2: ['aa', 'foo'], 3: ['ab', 'foo'], 4: ['ba', 'foo'], 5: ['bb', 'foo']}