リスト
前回、Pythonのmatplotlibで2軸グラフで表示する軸の値を指定する方法と軸の値を回転させる方法を紹介しました。
今回はリストから辞書を作成する方法を紹介します。
それでは始めていきましょう。
リストから辞書を作成する方法
リストから辞書を作成するには「[[“キー1”, 要素1], [“キー2”, 要素2], [“キー3”, 要素3] …]」というようなリストを作成し、「dict(リスト)」とすると作成できます。
data = [["a", 1], ["b", 2], ["c", 3], ["d", 4], ["e", 5]]
new_dict = dict(data)
print(new_dict)
実行結果
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
キーと要素が別のリストになっている場合のリストから辞書を作成する方法
ただ実際には「[[“キー1”, 要素1], [“キー2”, 要素2], [“キー3”, 要素3] …]」というリストが都合よく存在していることはほとんどないことでしょう。
あるとしたらキーと要素がそれぞれ別のリストになっている状態が考えられます。
ということでここからはキーと要素が別のリストになっている場合のリストから辞書を作成する方法を紹介していきます。
まずはfor文とzip関数をつかって2つのリストからそれぞれ要素を取り出し、一つはキー、もう一つを要素として先に作成しておいた辞書に追加していく方法です。
keys = ["a", "b", "c", "d", "e"]
values = [1, 2, 3, 4, 5]
new_dict = {}
for k, v in zip(keys, values):
new_dict[k] = v
print(new_dict)
実行結果
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
初心者にも分かりやすく作成できる方法ですし、他の処理と組み合わせるなんてことも簡単にできます。
次はリスト内包表記を使って、2つのリストから「[[“キー1”, 要素1], [“キー2”, 要素2], [“キー3”, 要素3] …]」を作って、辞書に変換する方法です。
keys = ["a", "b", "c", "d", "e"]
values = [1, 2, 3, 4, 5]
new_dict = dict([[k, v] for k, v in zip(keys, values)])
print(new_dict)
実行結果
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
リスト内包表記に慣れていれば簡潔に、分かりやすく書けるのでいい方法だと思います。
個人的な変わり種としてはfor文を使わず、zip関数だけを使う方法です。
私はこれまでzip関数は複数のリストから同じインデックスの要素を取得する関数だと思っていたのですが、実は違っていて「複数のリストから同じインデックスの要素をまとめたタプルを作成する関数」な様です。
そのためキーをまとめたリストと要素をまとめたリストを使ったzip関数をアンパックしてみるとこんな感じです。
keys = ["a", "b", "c", "d", "e"]
values = [1, 2, 3, 4, 5]
print(*zip(keys, values))
実行結果
('a', 1) ('b', 2) ('c', 3) ('d', 4) ('e', 5)
アスタリスクでアンパックする方法は、こちらの記事で紹介していますので良かったらどうぞ。
この形式よくみてみると最初の「[[“キー1”, 要素1], [“キー2”, 要素2], [“キー3”, 要素3] …]」と同じになっています。
そのため実はこのまま「dict()」で辞書にすることができます。
keys = ["a", "b", "c", "d", "e"]
values = [1, 2, 3, 4, 5]
new_dict = dict(zip(keys, values))
print(new_dict)
実行結果
{'a': 1, 'b': 2, 'c': 3, 'd': 4, 'e': 5}
次回はPandasで行方向にデータを追加する方法を紹介します。
ではでは今回はこんな感じで。
コメント