【问题标题】:I can't put a large list into dictionary plus tuples in Dictionary我不能将一个大列表放入字典和字典中的元组
【发布时间】: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


【解决方案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']}

【讨论】:

    猜你喜欢
    • 2023-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多