我有一个名为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?
答案 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'
然后你可以输入你的散列函数。