0

i have a list named as abc which have data like this :

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

Now i have to generate the md5 of the values like nokia , '1234' , '2013' for this i had taken these value in variable like this

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

after that i tried to use md5 to generate a hash like this

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

it gives me an error "must be string or buffer, not list" i know this will accept just string . but how can i generate the md5 of these list value?

4

2 回答 2

3

你有列表,而不是字符串。取每个列表的第一个元素:

authvalue = hashlib.md5()
auth1.update(devicetype[0] + userid[0] + year[0])
于 2013-08-04T19:12:14.740 回答
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, "")

所以 concat 将是:

'1234nokia2013'

然后您可以将其提供给您的散列函数。

于 2013-08-04T19:24:37.773 回答