2011-12-07 101 views
2

假设我想将一些数据拆分为60个字符的部分并将它们存储在散列中。我已经得到了以下的解决方案,但似乎有点脏对我说:分块数据的优雅方式

i = 0 
while signature != '': 
    header_hash['Some-Authorization-' + i] = signature[:60] 
    signature = signature[60:] 
    i += 1 

你能拿出处理这更好的方式(因为迭代,不断重新分配的)?

+0

我相信这是相同的http://stackoverflow.com/questions/312443/how-do-you-split-a-list-into-evenly-sized-chunks-in-python/312644 – larsks

+0

我要去建议使用'grouper()'配方来解决这个问题。此外,Python中的术语“散列”用于指代散列函数,而不是散列映射。把它称为“词典”并不困惑。另外,因为你的键都是不断变换的'int's,所以你应该使用'list'而不是'dict'。 –

+0

@Michael这实际上是有道理的,因为header_hash实际上是将加密哈希分割成http头域(稍后重命名,因为实际上并不清楚:))。我不打算破碎的匈牙利蟒蛇符号;) – viraptor

回答

3

虽然非常相似how to evenly split a list into chunks我相信这仍然是一个有效的问题,但将包含答案的一部分,以前的问题:

def hashing(header_hash, signature, hash_size): 
    for index, i in enumerate(xrange(len(signature), hash_size)): 
      header_hash['Some-Authorization-%s' % index] = signature[i:i+hash_size] 

这将是我的答案,回顾过去提供的itertools功能我怀疑在分组之后重新加入它们会否定使用itertools带来的好处。

+0

我这样做...枚举(xrange(...))仍然看起来像它可以在某种程度上更简单,但它比我更好:) – viraptor