2011-12-07 104 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