【Python】辞書型とは?openpyxlで効率的に操作する方法と活用例

スポンサードリンク
Python
  • 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を独学で学習する方法は特におすすめです。

最後までお読みいただき、ありがとうございました。がんばってください!

タイトルとURLをコピーしました