0

次のようなデータを持つ 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)

「リストではなく、文字列またはバッファでなければなりません」というエラーが表示されます。これは string のみを受け入れることを知っています。しかし、これらのリスト値の md5 を生成するにはどうすればよいですか?

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']]

そのラムダ関数をそれらのそれぞれにマッピングすることで、内側のリストを取り除きます:

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

次に、そのリストを減らすことで、すべての文字列の連結を取得できます。

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

したがって、連結は次のようになります。

'1234nokia2013'

これをハッシュ関数にフィードできます。

于 2013-08-04T19:24:37.773 に答える