【发布时间】:2015-06-01 09:20:42
【问题描述】:
这就是问题所在。如您所见,我正在创建 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:'a','foo',1:'b','foo',2:'aa','foo',3:'ab','foo',4:'ba','foo' , 5: 'bb', 'foo'}
如果看起来有问题,我深表歉意(因为我不知道)。我需要每个键都有两个值。
我当前的代码是:
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 位)散列与我在命令行上传递的参数(本身就是散列)进行比较。
【问题讨论】:
-
不要使用
enumerate作为函数名,因为它是python内置函数的名称 -
您正在返回单个元素,应该是什么键和值?
-
要制作字典,你需要一个键值对列表,你只有值
-
您说“我想为该列表创建一个字典”,但从不解释您希望在该字典中具有哪些键和值!如果
somelist的每个项目恰好有两个子项目(例如,somelist 是一个长度正好为两个的列表的列表),您只能调用dict(somelist),这意味着使用每个“第一个子项目”作为键第二个子项作为对应的值。但是您可疑地命名为enumerate的函数生成的列表绝对不是那样的,您会从哪里得到错误! -
我没有看到任何关于大列表的错误。我认为您需要的是 itertools.permutations 进行查找。
标签: python list dictionary reduce