在python中生成md5的列表值

时间:2013-08-04 19:09:19

标签: python list hash md5

我有一个名为abc的列表,其中包含如下数据:

{'devicetype': ['nokia'],'userid': ['1234'], 'year': ['2013']}

现在我必须生成nokia,'1234','2013'等值的md5 对于这个我已经在这个变量中取这些值

 devicetype = abc['devicetype']
 userid = abc['userid']
 year = abc['year']

之后,我尝试使用md5生成像这样的哈希

  authvalue = hashlib.md5()
  authvalue.update(devicetype+userid+year)

它给我一个错误“必须是字符串或缓冲区,而不是列表” 我知道这只会接受字符串。但是我如何生成这些列表值的md5?

2 个答案:

答案 0 :(得分:2)

您有列表,而不是字符串。获取每个列表的 first 元素:

authvalue = hashlib.md5()
auth1.update(devicetype[0] + userid[0] + year[0])

答案 1 :(得分:1)

Martijn Pieters的回答基本上是正确的,你有一个单一元素的列表。如果你有一个很大的字典,手动将[0]添加到每个条目可能会很痛苦。所以你可以使用map()和reduce()为你做这件事。

如果d是具有上述键值对的词典,则可以执行以下操作:

values = map(lambda x: x[0], d.values())

d.values()只是字典值的列表(在您的情况下,是1个元素长列表的列表):

[['1234'], ['nokia'], ['2013']]

通过将lambda函数映射到它们中的每一个,你可以摆脱内部列表:

['1234', 'nokia', '2013']

然后,您可以通过减少该列表来获取所有字符串的串联:

concat = reduce(lambda x, y: x + y, values, "")

如此简洁:

'1234nokia2013'

然后你可以输入你的散列函数。