- Pythonの辞書型データについて知りたい
- openpyxlで辞書型データを扱いたい
今回は、このようなお悩みを解決に導きます。
本記事を最後までお読みいただくことで、下記のようなことがわかります。
- Pythonの辞書型データの概要がわかる
- openpyxlで辞書型データを活用する方法を学べる
(辞書型データをエクセルへ書き込み・エクセルデータを辞書型として取得) - 辞書型データを更新・追加・削除する方法を知ることができる
※わかりやすさを重視しております。厳密には解釈が異なる場合がありますことをご了承ください。
Pythonの辞書型データとは?
「辞書型データ」とは、「キー」と「値」がペアになったデータのことです。
例えば「名前:Utatane」「職業:エンジニア」「趣味:将棋」といったデータのことで、
「名前、職業、趣味」が「キー」、「Utatane、エンジニア、将棋」が「値」を指します。
概要がわかったところで、辞書型データの作り方を見ていきましょう。
辞書型データの作り方
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
上記コードにて、辞書型データを作成することができます。
【コードの解説】
新しい名前の変数を書いたら、「=(イコール)」を書きます。
今回はわかりやすく、「data」という名前にしましたが、何でも構いません。
しかしながら、つけることができない名前があったりしますので、下記記事をご参考ください。
イコールの後ろには、{}(波カッコ)を書きます。
配列を[]で表すように、この {} が「これは辞書型データですよ」という宣言になります。
非常に重要ですので、これだけでも覚えておいてください。
配列については下記記事をご参考ください。
【 {} の出し方】
shiftキー+「」で {} を書くことができます。
全角の{}ではなく、半角の {} で書くようにしてください。
{}内にはデータを入れていきます。
前項で解説しました「キー」と「値」を書きましょう。
{‘キー‘: ‘値‘, ‘キー‘: ‘値‘,’キー‘: ‘値‘}といった具合です。
【注意点】
- キーと値は「’(半角クォーテーション)」で囲います
- キーと値の間には「:(半角コロン)」を書きます
- 複数のデータがある場合は、値とキーの間に「,(半角カンマ)」を書きます
では次に、出来上がった辞書型データの値を表示してみましょう。
辞書型データの値を表示する
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
print(data['名前'])
上記コードにて、辞書型データの値を表示することができます。
1行目は前項と同じですので、割愛します。
2行目で辞書型データの値(今回は名前)を表示させています。
これで変数「data」内の「名前(キー)」とペアになっている「Utatane(値)」が表示されます。
辞書型データの作り方がわかったところで、次です。
openpyxlで辞書型データを扱った活用例を見ていきましょう。
openpyxlでの辞書型データ活用例
今回は、「辞書型データ→エクセル」「エクセルデータ→辞書型」に変換する方法を紹介いたします。
辞書型データをエクセルに書き込み
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
for row, (key, atai) in enumerate(data.items(), start=1):
ws.cell(row=row, column=1, value=key)
ws.cell(row=row, column=2, value=atai)
wb.save('C:/Utatane/output.xlsx')
上記コードにて、辞書型データ(data)をエクセルファイルに書き込みすることができます。
辞書型データの「data」は前項で解説済ですので、割愛します。
インポートやブック・シートの読み込みは下記記事をご参考ください。
(openpyxlを始めて使用する場合はインストールが必要です)
8~10行目のみ抜粋します。
for row, (key, atai) in enumerate(data.items(), start=1):
ws.cell(row=row, column=1, value=key)
ws.cell(row=row, column=2, value=atai)
上記コードにて、辞書型データ(data)をエクセルファイルに書き込みしています。
【コードの解説】
「enumerate」にてキーや値の要素を取得し「key、value」に、行番号を「row」にそれぞれ代入します。
要素とは、「職業やエンジニア」などdataの中身のことだと思ってください。
キー(key)はA列(column=1)に、値(atai)はB列(column=2)にそれぞれ記述します。
行番号(row)は「start=1」と指定しているため、最初は1になります。
for文にて要素が無くなるまで繰り返し処理が行われます。
for文については、下記記事をご参考ください。
実行結果が下図です。
辞書型データをエクセルに書き込みすることができました。
列の幅が合ってないと気になる場合は、下記記事をご参考ください。
エクセルデータを辞書型として取得
import openpyxl
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
data = {}
for row in ws.iter_rows(min_row=1, max_col=2, values_only=True):
key, atai = row
data[key] = atai
print(data)
上記コードにて、エクセルファイルに書かれたデータを辞書型として取得することができます。
前項とは逆ですね。
コードの6行目以降を抜粋します。
data = {}
for row in ws.iter_rows(min_row=1, max_col=2, values_only=True):
key, atai = row
data[key] = atai
まずは空っぽの辞書型データを作ります(コードの6行目)
要素が何もない器だけのデータです。
8~10行目にて、エクセルから取得した要素を空っぽの辞書型データに追加しています。
【コードの解説】
「iter_rows」を使ってエクセルのデータを取得します。
「iter_rows」については下記記事をご参考ください。
取得したシートのデータから、1行分のデータを「row」という変数に入れます(コードの8行目)
「row」の中から、A列の要素を「key」に、B列の要素を「atai」に入れます(コードの9行目)
「key」と「atai」を紐づけてペアにします(コードの10行目)
これでエクセルデータが辞書型として取得されました。
応用例
ここからは、辞書型データの編集など、応用例を紹介いたします。
辞書型データの更新
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
data['職業'] = '無職'
print(data)
指定のキーとペアになっている値が更新されました。
辞書型データの追加
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
data['好きな食べ物'] = 'バウムクーヘン'
print(data)
要素を追加することができました。
複数の要素を追加したい場合は、下記コードを実行してください。
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
data.update({'好きな食べ物': 'バウムクーヘン', '嫌いな食べ物': '牡蠣'})
print(data)
辞書型データの削除
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
del data['職業']
print(data)
指定の「キー」&「キーとペアになっている値」が削除されました。
複数のキーを削除するには、上記delコードを繰り返し記述してください。
辞書型データの初期化
data = {'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
data = {}
print(data)
辞書型データが初期化され、要素が無い空っぽの状態になりました。
複数人の辞書型データを作成・書き込みする方法
これまでは、「Utatane」1人分の辞書型データでしたが、下記のように複数の辞書型データを作成したり、書き込みするにはどうしたらいいのでしょうか。
{'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'}
{'名前': 'Boss', '職業': 'ホテルマン', '趣味': '釣り'}
{'名前': 'Nero', '職業': 'デザイナー', '趣味': '無し'}
答えはいたってシンプルで、辞書型データを配列として扱うだけです。
data = [{辞書型データA},{辞書型データB},{辞書型データC}]
実際にコードで表すと、下記のようになります。
data = [
{'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'},
{'名前': 'Boss', '職業': 'ホテルマン', '趣味': '釣り'},
{'名前': 'Nero', '職業': 'デザイナー', '趣味': '無し'}
]
では、この辞書型データをエクセルに書き込むコードを見ていきましょう。
import openpyxl
data = [
{'名前': 'Utatane', '職業': 'エンジニア', '趣味': '将棋'},
{'名前': 'Boss', '職業': 'ホテルマン', '趣味': '釣り'},
{'名前': 'Nero', '職業': 'デザイナー', '趣味': '無し'}
]
wb = openpyxl.load_workbook('C:/Utatane/input.xlsx')
ws = wb['Sheet1']
headers = data[0].keys()
ws.append(list(headers))
for row in data:
ws.append(list(row.values()))
wb.save('C:/Utatane/output.xlsx')
【コード解説】
12行目でキー(名前・職業・趣味)を取得し、
13行目でキーをエクセルの1行目に書き込みしています。
15・16行目で値を順番にエクセルに書き込みして完了です。
複数人の辞書型データがエクセルに書き込みされました。
最後に
今回は辞書型データについて解説いたしました。
当ブログでは、Pythonに関する情報を配信しております。
この記事がわかりやすいと感じた方は、他の記事も読んでいってください。
挫折せずにPythonを独学で学習する方法は特におすすめです。
最後までお読みいただき、ありがとうございました。がんばってください!