文法・環境 組み込み関数

【python】辞書(dict)の作成、作り方【dict関数、zip関数、内包表記、csvなどから作成】

pythonの辞書(dict)の作成方法について紹介します。

本記事では、下記の内容を紹介しています。

この記事で分かること

  • 辞書(dict)を波括弧で作成する方法
  • 辞書(dict)をdict関数から作成する方法
  • 辞書(dict)を内包表記で作成【for文】
  • 辞書(dict)をcsvファイルから読み込んで作成

スポンサーリンク

辞書(dict)を波括弧で作成

辞書は、波括弧 " { } "の中に、キー(key)と値(value)の組み合わせを、カンマ " , " で区切って、定義します。

辞書の定義方法

{ キー1 : 値1, キー2 :値2, キー3 : 値3,  ・・・ }

以下、辞書を波括弧で定義するサンプルコードです。

### 辞書を波括弧で作成する
fruits_dict = {'Apple':10, 'Banana':20, 'Orange':30}

print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 10, 'Banana': 20, 'Orange': 30}

>print(type(fruits_dict))
># <class 'dict'>

" fruits_dict " が辞書型であることが確認できます。

同じキー(key)を指定すると、値(value)が上書きされます。

### 同じキーを指定すると、値が上書きされるので注意
fruits_dict = {'Apple':10, 'Banana':20, 'Orange':30, 'Apple':100}

print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 100, 'Banana': 20, 'Orange': 30}

スポンサーリンク

辞書(dict)をdict関数から作成

波括弧で囲う方法以外にも、辞書を定義する方法はいくつかあります。

次に、dict関数を用いて辞書を作成する方法を3つ紹介します。

辞書(dict)をdict関数と " キー = 値 " から作成

dict関数を用いると、キーと値をペアとして、辞書に変換できます

dict関数の引数として、キーと値 を "イコール" で繋いで指定することで辞書を作成できます。

キー(key)や値(value)が文字列であっても、クォーテーション「’」で囲む必要はありません。

dict関数で辞書を作成

dict( キー1 = 値1, キー2 = 値2, キー3 = 値3, ・・・ )

以下、dict関数で辞書を作成するサンプルコードです。

### dict関数と " キー = 値 " から辞書を作成
fruits_dict = dict(Apple=10, Banana=20, Orange=30)

print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 100, 'Banana': 20, 'Orange': 30}

辞書(dict)をリスト(list)から作成【dict関数】

dict関数は、イテラブルオブジェクト(タプルやリストなど)を、辞書に変換します。

書き方

dict( イテラブルオブジェクト )

以下、リストをdict関数で辞書に変換するサンプルコードです。

### 辞書をリストから作成【dict関数】
fruits_list = [['Apple',10], ['Banana',20], ['Orange',30]]
print(fruits_list)
# [['Apple', 10], ['Banana', 20], ['Orange', 30]]

fruits_dict = dict(fruits_list)
print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 100, 'Banana': 20, 'Orange': 30}

辞書(dict)を2つのリスト(list)から作成【zip関数、dict関数】

キー(key)と、値(value)、それぞれ別のリスト2つから、辞書を作成する方法を紹介します。

2つのリストを組合せて辞書を作成する場合は、zip関数を用いると便利です。

書き方

dict( zip( イテラブルオブジェクト1, イテラブルオブジェクト2 ) )

以下、2つのリストを組合せて辞書を作成するサンプルコードです。

### 辞書を2つのリストから作成【zip関数、dict関数】
fruits_list = ['Apple', 'Banana', 'Orange']
numbers_list = [10, 20, 30]

fruits_dict = dict(zip(fruits_list, numbers_list))
print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 100, 'Banana': 20, 'Orange': 30}

zip関数は、イテラブルオブジェクト(タプルやリストなど)をまとめる関数です。

zip関数を用いると、複数のイテラブルオブジェクトの要素を同時に取得できます。

なお、zip関数については下記の記事で詳しく紹介しています。

スポンサーリンク

辞書(dict)を内包表記で作成【for】

内包表記で、辞書を作成する方法を紹介します。

内包表記を用いると、ループ処理を簡潔に記述できます

波括弧 "{ }" 内に内包表記で記載することで、辞書を定義できます。

辞書内包表記の書き方

{ キー : 値 for 任意の変数名 in イテラブルオブジェクト }

以下、サンプルコードです。

### 内包表記で辞書を作成
fruits_list = ['Apple', 'Banana', 'Orange']

fruits_dict = {fruit : len(fruit) for fruit in fruits_list}

print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 5, 'Banana': 6, 'Orange': 6}

リストから要素を取り出し、キーとして指定しています。

また、要素の文字数を値として指定しています。

ifを用いた内包表記で辞書を作成

前述の内包表記に、" if 条件式 " を付け加えることもできます

辞書内包表記の書き方

{ キー : 値 for 任意の変数名 in イテラブルオブジェクト if 条件式 }

以下、サンプルコードです。

### ifを用いた内包表記で辞書を作成
fruits_list = ['Apple', 'Banana', 'Orange', 'Lemon', 'Grape']

fruits_dict = {fruit : len(fruit) for fruit in fruits_list if len(fruit) > 5}

print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Banana': 6, 'Orange': 6}

値の文字数が5より大きいものだけが、辞書の要素になっていることが分かります。

内包表記とzip関数を組み合わせて辞書を作成

内包表記とzip関数を組み合わせて辞書を作成することもできます。

以下、サンプルコードです。

### 内包表記とzip関数で辞書を作成
fruits_list = ['Apple', 'Banana', 'Orange']
numbers_list = [10, 20, 30]

fruits_dict = {fruit : num for fruit, num in zip(fruits_list, numbers_list)}

print(type(fruits_dict))
# <class 'dict'>
print(fruits_dict)
# {'Apple': 100, 'Banana': 20, 'Orange': 30}

スポンサーリンク

辞書(dict)をcsvファイルから読み込んで作成

csvから読み込んだデータから辞書を作成することもできます。

csvファイルから読み込んだデータで辞書を作成するには、csvモジュールを使用します。

csvモジュールのDirectReader関数を使用することで、dict型で読み込むことができます。

こちらが読み込むcsvファイルの例です。

csvを読み込んで辞書を作成
csvの例。ファイル名は「test.csv」

以下、サンプルコードです。

### csvを読み込んで辞書を作成
import csv

csv_path = r"C:\***** 任意の保存先 *****\test.csv"
csv_header = ['fruits','num']

with open(csv_path, 'r',newline='', encoding='utf-8_sig') as csvfile :
    reader = csv.DictReader(csvfile, csv_header)
    for row in reader:
        print(row)

# OrderedDict([('fruits', 'Apple'), ('num', '10')])
# OrderedDict([('fruits', 'Banana'), ('num', '20')])
# OrderedDict([('fruits', 'Orange'), ('num', '30')])

> csv_header = ['fruits','num']

読み込んだcsvデータのヘッダーを指定しています。

> reader = csv.DictReader(csvfile, csv_header)

DirectReader関数の引数に、ファイルパスとヘッダーを渡して、csvファイルのデータを辞書として読み込みます。

> for row in reader:
>     print(row)

readerの中身を確認するために、for文で1行ごとデータを確認しています。

> # OrderedDict([('fruits', 'Apple'), ('num', '10')])
> # OrderedDict([('fruits', 'Banana'), ('num', '20')])
> # OrderedDict([('fruits', 'Orange'), ('num', '30')])

ヘッダーがキーになり、csvデータが値になっています。

このキーを指定することで、欲しい情報のみ選択して取得することもできます。

以下、キーを指定して、データ取得する例です。

### csvを読み込んで辞書を作成し、キーを指定して値を取得
import csv

csv_path = r"C:\***** 任意の保存先 *****\test.csv"
csv_header = ['fruits','num']

with open(csv_path, 'r',newline='', encoding='utf-8_sig') as csvfile :
    reader = csv.DictReader(csvfile, csv_header)
    for row in reader:
        print(row['fruits'])
        print(row.get('num'))
# Apple
# 10
# Banana
# 20
# Orange
# 30

> print(row['fruits'])
> print(row.get('num'))

辞書のキー指定は、上記どちらの記述でも大丈夫です。

辞書(dict)をcsvファイルから読み込んで作成【キーと値をセットで読み込み】

csvファイルを読み込んで辞書を作成する方法について、別の例も紹介します。

以下、サンプルコードでは、csvの1列目をキー、2列目を値として、辞書を生成しています。

### csvを読み込んで辞書を作成
import csv

csv_path = r"C:\***** 任意の保存先 *****\test.csv"
fruits_dict = {}

with open(csv_path, 'r', newline='', encoding='utf-8_sig') as csvfile:
    reader = csv.reader(csvfile)
    dict_from_csv = {rows[0]:rows[1] for rows in reader}

print(dict_from_csv)
#{'Apple': '10', 'Banana': '20', 'Orange': '30'}

> reader = csv.reader(csvfile)

csvデータは、csvモジュールのreader関数で読み込んでいます。

> dict_from_csv = {rows[0]:rows[1] for rows in reader}

辞書内包表記で、readerを行ごとにrowsに取り出し、rows[0]:rows[1]でキーと値にして辞書を作成しています。

スポンサーリンク

まとめ

pythonの辞書の作成方法について、さまざま方法を紹介していきました。

波括弧やdict関数は、辞書の作成方法の基本なので使いこなせるようにしておきましょう。

スポンサーリンク

スポンサーリンク

-文法・環境, 組み込み関数
-,