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()を使った方法がおすすめです。用途に応じて使い分けましょう。
-
Pythonで文字列を単語のリストに変換する方法
文字列を単語のリストに変換したい場合は、空白文字を基準に文字列を分割するだけで実現できます。最もシンプルな方法は、文字列クラスが標準で提供している split() メソッドを使うことです。このメソッドのデフォルトの区切り文字は空白であり、文字列に対して呼び出すと、空白文字の位置で自動的に分割してくれます。split()メソッドを使う方法引数を指定せずに split() を呼び出すだけで、連続する空白もまとめて処理され、単語ごとのリストが返されます。コード例>>> Please split this string.split() [Please, split, this, st
-
Pythonでリストの文字列表現をリストに変換する方法【ast.literal_evalの使い方】
Pythonでは、[apple, orange, banana] のように文字列として表現されたリストを、実際のリストオブジェクトへ変換したい場面があります。そんなときに便利なのが、標準ライブラリの ast.literal_eval() です。 ast.literal_eval()とは ast.literal_eval() は、文字列をPythonの式として安全に評価するための関数です。任意のコードを実行してしまう危険性がある eval() と異なり、評価できるのは文字列・数値・タプル・リスト・辞書・ブール値(True / False)、そして None といったPythonのリテラル構造のみ