Pythonでリストのインデックスを値とする辞書を作成する方法
この記事では、Pythonで頻繁に使われるコレクションの一つである「リスト」から辞書を作成する方法を解説します。リスト自体にはインデックスやキーが含まれていませんが、辞書ではすべての要素(値)に対してキーやインデックスを関連付ける必要があります。
ここでは、リストの各要素を「値」として持ち、その位置(インデックス)を対応する値として格納する辞書の作り方を、2つの異なるアプローチで紹介します。
enumerate関数を使う方法
enumerate関数は、イテラブルなオブジェクトの各要素にカウンター(連番)を割り当ててくれる便利な組み込み関数です。この関数を対象のリストに適用し、forループと組み合わせることで、enumerateが生成した番号をキーとした辞書を簡単に作成できます。
サンプルコード
Alist = ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
# 元のリスト
print("Given list : ", Alist)
# 辞書への変換
NewDict = {val: key + 1 for key, val in enumerate(Alist)}
# 結果の出力
print("Dictionary created with index : ", NewDict)実行結果
上記のコードを実行すると、次のような出力が得られます。
Given list : ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
Dictionary created with index : {'Mon': 1, 'Tue': 2, 'Wed': 4, 11: 6}ここで注意すべき点は、重複した要素が存在する場合、辞書には重複の中で最も大きいインデックス値を持つものだけが表示されるという点です。上の例では、「Wed」はインデックス2と3に存在しますが、結果にはより後ろの位置に対応する値「4」のみが残っています。これは、辞書内包表記が同じキーに対して後から処理した値で上書きしていくためです。
zip関数とrange関数を使う方法
もう一つのアプローチは、range関数を使って「1」から始まり、渡されたリストの長さまでの連番を生成する方法です。生成した連番とリストの要素をzip関数でペアにし、最後にdict関数を適用することで辞書を作成します。
サンプルコード
Alist = ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
# 元のリスト
print("Given list : ", Alist)
# 辞書への変換
NewDict = dict(zip(Alist, range(1, len(Alist)+1)))
# 結果の出力
print("Dictionary created with index : ", NewDict)実行結果
上記のコードを実行すると、enumerateを使った場合と同じ結果が得られます。
Given list : ['Mon', 'Tue', 'Wed', 'Wed', 11, 11]
Dictionary created with index : {'Mon': 1, 'Tue': 2, 'Wed': 4, 11: 6}まとめ
リストからインデックスを値とする辞書を作成する方法として、enumerate関数を使う方法と、zip関数+range関数を使う方法の2つを紹介しました。どちらも簡潔に書けるPythonらしい手法ですが、重複要素の扱い(後勝ちで上書きされる挙動)には注意が必要です。用途に応じて使い分けてください。
-
Pythonでインデックスに基づいてネストされたリストに要素を加算する方法
Pythonでは、リストの中にさらにリストを入れた「ネストされたリスト(入れ子構造のリスト)」を作成できます。本記事では、シンプルなリストの各要素を、ネストされたリストの対応する要素に加算する方法を解説します。リスト同士の長さが異なる場合、短い方のリストの長さが結果のリストの最大長となります。以下に、この処理を実現する複数の方法を紹介します。forループを使用する方法この方法では、短い方のリストの長さを取得し、その要素を順番にループ処理しながら、大きい方のリストの対応する要素に加算していきます。各要素はappend()関数を使って結果リストに追加します。コード例simple_list = [2
-
Pythonでzip()と内包表記を使ってリストから辞書を作成する方法
Pythonでは、2つのリスト(キーと値)を組み合わせて辞書を作成したい場面がよくあります。この記事では、組み込み関数 zip() と dict()、さらにPython 3.xで利用できる辞書内包表記を使った2つの方法をわかりやすく解説します。 方法1:dict()とzip()を組み合わせる zip() はPythonの組み込み関数で、複数のリストから同じインデックス位置にある要素を取り出し、タプルのペア(イテレータ)として返します。一方のリストをキー、もう一方を値とすれば、このzipオブジェクトを組み込み関数 dict() に渡すだけで、簡単に辞書オブジェクトを構築できます。 >&