人生100年!生涯エンジニア人生!

楽しいエンジニア人生!

Pythonで「反復可能要素」と言われると・・・

謎の日本語訳

formdata (dict or iterable of tuples) -- これは、URLエンコードされてリクエストの本文に割り当てられるHTMLフォームデータを含む辞書(または (キー, 値)タプルの反復可能要素)です。

(キー, 値)タプルの反復可能要素とは?

タプル(tuple)は("nyan",2)の形式で、反復可能要素はiterableのことなのでforで渡す[]のlist形式にすればと雑に考えましたが・・・。
[('wan', 1), ('nyan', 2), ('wan', 2)] こんな感じかな?とね。

ソース確認だ!

疑問が出たのでソースを確認しました。

    try:
        formdata_keys = dict(formdata or ()).keys()
    except (ValueError, TypeError):
        raise ValueError('formdata should be a dict or iterable of tuples')

なるほどdict形式ならkeys()で取り出せるね。

それならば、tupleのlist形式ならどうなるのか?
確認してみましょう。

>>> test = [('wan', 1), ('nyan', 2), ('wan', 2)]
>>> test
[('wan', 1), ('nyan', 2), ('wan', 2)]
>>> dict(test).keys()
dict_keys(['wan', 'nyan'])

ちゃんと取れますね。
ちなみに、keysで取得しているのはHTMLのname情報を取得するためみたいなので、重複しても問題無いようです。
モヤッとしたときは、ソース確認するとスッキリしますね。
そして、「タプルならリスト形式です。」とドキュメントにあれば理解しやすいのかな?と思ったけど['wan', 1, 'nyan', 2, 'wan', 2]としてしまいそうだから、(キー, 値)タプルの反復可能要素で良いかも、勉強になりました。

なお日本語訳の元となるiterable of tuplesはエラーメッセージに書いてありました。