Python
 Computer >> コンピューター >  >> プログラミング >> Python

Pythonでリストを辞書に変換する方法を徹底解説!forループとzip()の使い方

Pythonにおけるリストは、複数のデータ要素を順番に格納できる線形データ構造です。

例:

1, 2, 3, 4, 5, 6

一方、辞書(dict)は「キー: 値」のペアで構成されるデータ構造です。各キーは一意であり、それぞれに対応する値が関連付けられています。

例:

{1: 2, 3: 4, 5: 6}

ここでは、「リストの奇数番目の要素をキー、偶数番目の要素を値として辞書に変換する」方法を2つ紹介します。

方法1:forループでリストを反復処理する

最も基本的な方法は、range()関数を使って2つずつインデックスを進めながら、リストの要素をペアとして辞書に追加していく方法です。

サンプルコード

def convert(l):
    dic = {}
    for i in range(0, len(l), 2):
        dic[l[i]] = l[i + 1]
    return dic

ar = [1, 'Delhi', 2, 'Kolkata', 3, 'Bangalore', 4, 'Noida']
print(convert(ar))

実行結果

{1: 'Delhi', 2: 'Kolkata', 3: 'Bangalore', 4: 'Noida'}

このコードでは、ステップ幅を2に設定したrange(0, len(l), 2)により、奇数番目の要素(インデックス0, 2, 4...)をキーとし、その直後の要素を値として辞書に登録しています。処理の流れが直感的で理解しやすいのが特徴です。

方法2:zip()関数を使う

より簡潔に書きたい場合は、iter()関数でイテレータを作成し、zip()関数で同じイテレータから2つの要素ずつ取り出してペア化する方法が便利です。最後にdict()関数で型変換することで、辞書が完成します。

サンプルコード

def convert(l):
    i = iter(l)
    dic = dict(zip(i, i))
    return dic

ar = [1, 'Delhi', 2, 'Kolkata', 3, 'Bangalore', 4, 'Noida']
print(convert(ar))

実行結果

{1: 'Delhi', 2: 'Kolkata', 3: 'Bangalore', 4: 'Noida'}

ポイントは、同じイテレータオブジェクトをzip()に2回渡している点です。zip()は引数ごとに独立して次の要素を取得するため、同じイテレータを渡すことで「1つ目の要素をキー、2つ目の要素を値」というペアが自動的に生成されます。

まとめ

方法特徴
forループ処理内容が明確で初心者にも理解しやすい。条件分岐や前処理を挟みやすい。
zip()コードが短く簡潔。Pythonらしいイディオム的な書き方。

どちらの方法も結果は同じですが、可読性や拡張性を重視するならforループ、簡潔さを重視するならzip()を使った方法がおすすめです。用途に応じて使い分けましょう。

  1. Pythonで文字列を単語のリストに変換する方法

    文字列を単語のリストに変換したい場合は、空白文字を基準に文字列を分割するだけで実現できます。最もシンプルな方法は、文字列クラスが標準で提供している split() メソッドを使うことです。このメソッドのデフォルトの区切り文字は空白であり、文字列に対して呼び出すと、空白文字の位置で自動的に分割してくれます。split()メソッドを使う方法引数を指定せずに split() を呼び出すだけで、連続する空白もまとめて処理され、単語ごとのリストが返されます。コード例>>> Please split this string.split() [Please, split, this, st

  2. Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】

    Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ