テクノロジー 開発 非公開: Python で Defaultdict をいつどのように使用する必要がありますか?

Python で Defaultdict をいつどのように使用する必要がありますか?

このチュートリアルでは、Python 辞書を操作するときに KeyError をより適切に処理するために、Python のコレクション モジュールから defaultdict を使用する方法を学びます。

Python では、辞書はデータをキーと値のペアで保存する強力な組み込みデータ構造です。キーを使用して辞書をタップし、値にアクセスします。

ただし、コードの実行中に変更される Python スクリプト内に複数の辞書がある場合、多くの場合 KeyError が発生します。そして、それらに対処できる方法がいくつかあります。

このチュートリアルでは、次のことを学習します。

  • KeyError とは何か、およびそれが発生する理由
  • KeyError の処理方法
  • Python の defaultdict (組み込み dict クラスから継承するサブクラス) を使用して、欠落しているキーをより適切に処理する方法

さぁ、始めよう!

Python で Defaultdict をいつどのように使用する必要がありますか?
Python で Defaultdict をいつどのように使用する必要がありますか?

Python の KeyError とは何ですか?

1
1

Python 辞書を定義するときは、次の点に注意する必要があります。

  • キーは重複せずに一意である必要があります。
  • 既存の反復可能オブジェクトを辞書のキーとして使用する場合は、タプルなどの不変コレクションを使用することをお勧めします。

したがって、キーは辞書に存在する場合にのみ有効です。それ以外の場合は KeyError が発生します。

次の辞書 books_authors について考えてみましょう。この辞書では、キーが書籍の名前、値が著者の名前です。

このチュートリアルに沿って Python REPL でコーディングできます。

 books_authors = {
    'Deep Work':'Cal Newport',
    'Hyperfocus':'Chris Bailey',
    'Pivot':'Jenny Blake',
    'The Happiness Equation':'Neil Pasricha'
}

キー (書籍名) を使用して著者名にアクセスできます。

 books_authors['Hyperfocus']
'Chris Bailey'

ディクショナリ内のすべてのキーと値のペアにアクセスするには、以下に示すように、ディクショナリ オブジェクトの items() メソッドを呼び出します。

 for book,author in books_authors.items():
  print(f"'{book}' by {author}")
 'Deep Work' by Cal Newport
'Hyperfocus' by Chris Bailey
'Pivot' by Jenny Blake
'The Happiness Equation' by Neil Pasricha

ディクショナリに存在しないキーの値にアクセスしようとすると、Python インタープリタは KeyError を生成します。存在しないキー、つまり「Grit」と「存在しないキー」の値にアクセスしようとすると、KeyError が発生します。

 books_authors['Grit']
 ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-6-e1a4486f5ced> in <module>
----> 1 books_authors['Grit']

KeyError: 'Grit'
 books_authors['non-existent-key']
 ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-a3efd56f69e5> in <module>
----> 1 books_authors['non-existent-key']

KeyError: 'non-existent-key'

では、Python で KeyError をどのように処理するのでしょうか?

これを行うにはいくつかの方法があります。次のセクションで説明します。

Python で KeyError を処理する方法

以下を使用して KeyError を処理する方法を学びましょう。

  • If-else 条件文
  • Try-Except ブロック
  • 辞書メソッド .get()

#1. If-Else 条件文の使用

Python で KeyError を処理する最も簡単な方法の 1 つは、if-else 条件文を使用することです。

Python では、if-else ステートメントには次の一般的な構文があります。

 if condition:
 	# do this 
 else:
    # do something else 
  • 条件が True の場合、 if 本体内のステートメントが実行され、
  • 条件が False の場合、 else 本体のステートメントが実行されます。

この例では、キーが辞書に存在するかどうかを確認することが条件となります。

キーが辞書に存在する場合、 in 演算子は True を返し、 body が実行されると、対応する値が出力されます。

 key = 'The Happiness Equation'
if key in books_authors:
  print(books_authors[key])
else:
  print('Sorry, this key does not exist!')

# Output
# Neil Pasricha

キーが辞書に存在しない場合、 in 演算子は False を返し、 else 本体が実行されます。キーが存在しないというメッセージが出力されます。

 key = 'non-existent-key'
if key in books_authors:
  print(books_authors[key])
else:
  print('Sorry, this key does not exist!')

# Output
# Sorry, this key does not exist!

#2. Try-Except ステートメントの使用

2
2

KeyError を処理するもう 1 つの一般的な方法は、Python の try-exc ステートメントを使用することです。

次のコード ブロックを読んでください。

 key = 'non-existent-key'
try:
  print(books_authors[key])
except KeyError:
  print('Sorry, this key does not exist!')
  • try ブロックは、指定されたキーに対応する値の取得を試みます。
  • キーが存在しない場合、インタプリタは KeyError を生成します。これは、 Except ブロック内で例外として処理されます。

#3. .get() メソッドの使用

Python では、組み込みの辞書メソッド .get() を使用して、欠落しているキーを処理できます。

get() メソッドを使用する一般的な構文は dict.get(key,default_value) です。ここで、 dict は Python の有効な辞書オブジェクトです。

– キーが辞書に存在する場合、 get() メソッドは値を返します。
– それ以外の場合は、デフォルト値を返します。

この例では、 keys はアクセスしたい値を持つキーのリストです。キー リストをループして、 books_authors 辞書から対応する値を取得します。

ここでは、デフォルト値として「存在しません」を指定して .get() メソッドを使用しました。

 keys = ['Grit','Hyperfocus','Make Time','Deep Work']
for key in keys:
  print(books_authors.get(key,'Does not exist'))

上記のコードでは次のようになります。

  • books_authors 辞書に存在するキーの場合、 .get() メソッドは対応する値を返します。
  • キーが存在しない場合 (この場合は「Grit」と「Make Time」)、.get() メソッドはデフォルト値「存在しません」を返します。
 # Output

Does not exist
Chris Bailey
Does not exist
Cal Newport

上記のすべての方法は、重要なエラーを処理するのに役立ちます。ただし、これらは冗長であり、不足しているキーを明示的に処理する必要があります。通常の辞書の代わりに defaultdict を使用すると、このプロセスを簡素化できます。

Python の Defaultdict

python-defaultdict
python-defaultdict

defaultdict は、辞書 ( dict ) クラスのサブクラスです。したがって、Python 辞書の動作を継承します。さらに、不足しているキーもネイティブに処理します。

defaultdict は collections モジュール内の Python 標準ライブラリに組み込まれているコンテナ データ型です。

したがって、それを作業環境にインポートする必要があります。

 from collections import defaultdict

以下は、 defaultdict 使用するための一般的な構文です。

 defaultdict(default_factory)

int、float、list などの呼び出し可能オブジェクトを default_factory 属性として指定できます。 default_factory の値を指定しない場合、デフォルトの None になります。

探しているキーが存在しない場合、 __missing__() メソッドがトリガーされ、 default_factory からデフォルト値が推測されます。その後、このデフォルト値を返します。

要約すれば:

  • Python では、キーが存在しない場合、 defaultdict デフォルト値を返します。
  • また、このキーとデフォルト値のペアがディクショナリに追加され、後で変更できるようになります。

Python の Defaultdict の例

デフォルト辞書-例-1
デフォルト辞書-例-1

次に、Pythonのdefaultdictがどのように機能するかを理解するために、いくつかの例をコーディングします。

デフォルトの整数値を使用した Python の Defaultdict

まず、 collections モジュールから defaultdict インポートします。

 from collections import defaultdict
import random

prices を作成しましょう。

 prices = defaultdict(int)

次に、 fruits リストの項目をキーとして使用して、 prices 辞書を作成します。そして、 price_list から値をランダムにサンプリングして値を取得します。

 price_list = [10,23,12,19,5]
fruits = ['apple','strawberry','pomegranate','blueberry']

for fruit in fruits:
  prices[fruit] = random.choice(price_list)

prices defaultdict内のキーと値のペアを見てみましょう。

 print(prices.items())
 dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])

通常の Python 辞書と同様に、次のキーを使用して prices のdefaultdictの値にアクセスできます。

 prices['apple']
# 23

ここで、存在しない果物、たとえば「オレンジ」の価格にアクセスしてみましょう。 デフォルト 値のゼロが返されることがわかります。

 prices['orange']
# 0

辞書を出力すると、新しいキー「オレンジ」がデフォルトの整数値ゼロで追加されていることがわかります。

 print(prices.items())
 dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])

リストをデフォルト値として使用する Python の Defaultdict

students_majors リストの defaultdict として定義しましょう。メジャーの名前が鍵となります。そして、その値は、数学、経済学、コンピューター サイエンスなどの各専攻を追求する学生のリストです。

 from collections import defaultdict
students_majors = defaultdict(list)

「経済学」に対応する学生リストにアクセスしようとすると、defaultdict は空のリストを返します。キーエラーはありません!

 students_majors['Economics']
# []

これで、「経済学」専攻にマッピングされた空のリストができました。したがって、リスト メソッド .append() を使用して、このリストに要素を追加できるようになりました。

 students_majors['Economics'].append('Alex')

students_majors デフォルト辞書に「経済学」のエントリが作成されました。

 print(students_majors)
 defaultdict(<class 'list'>, {'Economics': ['Alex']})

経済学専攻にマッピングするリストに学生を追加したり、新しい専攻を追加したりすることができます。

 students_majors['Economics'].append('Bob')
students_majors['Math'].append('Laura')
print(students_majors)
 defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})

結論

このチュートリアルが、Python で defaultdict を いつどのように使用する必要があるかを理解するのに役立つことを願っています。このチュートリアルのコード例を実行した後、必要に応じて、プロジェクト内の優先データ構造としてdefaultdictを使用してみることができます。

このチュートリアルで学んだことの概要を次に示します。

  • Python 辞書を使用していると、KeyError に遭遇することがよくあります。
  • このような KeyError を処理するには、いくつかの詳細なメソッドを使用できます。条件文、try-excel ブロッ​​ク、または .get() メソッドを使用できます。ただし、コレクション モジュールの defaultdict データ型を使用すると、この KeyError 処理を簡素化できます。
  • defaultdict(default_factory) を使用できます 。default_factory は 有効な呼び出し可能です。
  • キーがdefaultdictに存在しない場合、デフォルト値( default_factory から推測)とキーがdefaultdictに追加されます。

次に、Python のマップ関数に関するチュートリアルを確認してください。

「 Python で Defaultdict をいつどのように使用する必要がありますか?」についてわかりやすく解説!絶対に観るべきベスト2動画

Simplifying code with defaultdict in python
【Pythonプログラミング】並列処理の基本を解説!マルチスレッド・マルチプロセスをconcurrent futuresで実装!

このチュートリアルでは、Python 辞書を操作するときに KeyError をより適切に処理するために、Python のコレクション モジュールから defaultdict を使用する方法を学びます。

Python では、辞書はデータをキーと値のペアで保存する強力な組み込みデータ構造です。キーを使用して辞書をタップし、値にアクセスします。

ただし、コードの実行中に変更される Python スクリプト内に複数の辞書がある場合、多くの場合 KeyError が発生します。そして、それらに対処できる方法がいくつかあります。

このチュートリアルでは、次のことを学習します。

  • KeyError とは何か、およびそれが発生する理由
  • KeyError の処理方法
  • Python の defaultdict (組み込み dict クラスから継承するサブクラス) を使用して、欠落しているキーをより適切に処理する方法

さぁ、始めよう!

Python で Defaultdict をいつどのように使用する必要がありますか?
Python で Defaultdict をいつどのように使用する必要がありますか?

Python の KeyError とは何ですか?

1
1

Python 辞書を定義するときは、次の点に注意する必要があります。

  • キーは重複せずに一意である必要があります。
  • 既存の反復可能オブジェクトを辞書のキーとして使用する場合は、タプルなどの不変コレクションを使用することをお勧めします。

したがって、キーは辞書に存在する場合にのみ有効です。それ以外の場合は KeyError が発生します。

次の辞書 books_authors について考えてみましょう。この辞書では、キーが書籍の名前、値が著者の名前です。

このチュートリアルに沿って Python REPL でコーディングできます。

 books_authors = {
    'Deep Work':'Cal Newport',
    'Hyperfocus':'Chris Bailey',
    'Pivot':'Jenny Blake',
    'The Happiness Equation':'Neil Pasricha'
}

キー (書籍名) を使用して著者名にアクセスできます。

 books_authors['Hyperfocus']
'Chris Bailey'

ディクショナリ内のすべてのキーと値のペアにアクセスするには、以下に示すように、ディクショナリ オブジェクトの items() メソッドを呼び出します。

 for book,author in books_authors.items():
  print(f"'{book}' by {author}")
 'Deep Work' by Cal Newport
'Hyperfocus' by Chris Bailey
'Pivot' by Jenny Blake
'The Happiness Equation' by Neil Pasricha

ディクショナリに存在しないキーの値にアクセスしようとすると、Python インタープリタは KeyError を生成します。存在しないキー、つまり「Grit」と「存在しないキー」の値にアクセスしようとすると、KeyError が発生します。

 books_authors['Grit']
 ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-6-e1a4486f5ced> in <module>
----> 1 books_authors['Grit']

KeyError: 'Grit'
 books_authors['non-existent-key']
 ---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-7-a3efd56f69e5> in <module>
----> 1 books_authors['non-existent-key']

KeyError: 'non-existent-key'

では、Python で KeyError をどのように処理するのでしょうか?

これを行うにはいくつかの方法があります。次のセクションで説明します。

Python で KeyError を処理する方法

以下を使用して KeyError を処理する方法を学びましょう。

  • If-else 条件文
  • Try-Except ブロック
  • 辞書メソッド .get()

#1. If-Else 条件文の使用

Python で KeyError を処理する最も簡単な方法の 1 つは、if-else 条件文を使用することです。

Python では、if-else ステートメントには次の一般的な構文があります。

 if condition:
 	# do this 
 else:
    # do something else 
  • 条件が True の場合、 if 本体内のステートメントが実行され、
  • 条件が False の場合、 else 本体のステートメントが実行されます。

この例では、キーが辞書に存在するかどうかを確認することが条件となります。

キーが辞書に存在する場合、 in 演算子は True を返し、 body が実行されると、対応する値が出力されます。

 key = 'The Happiness Equation'
if key in books_authors:
  print(books_authors[key])
else:
  print('Sorry, this key does not exist!')

# Output
# Neil Pasricha

キーが辞書に存在しない場合、 in 演算子は False を返し、 else 本体が実行されます。キーが存在しないというメッセージが出力されます。

 key = 'non-existent-key'
if key in books_authors:
  print(books_authors[key])
else:
  print('Sorry, this key does not exist!')

# Output
# Sorry, this key does not exist!

#2. Try-Except ステートメントの使用

2
2

KeyError を処理するもう 1 つの一般的な方法は、Python の try-exc ステートメントを使用することです。

次のコード ブロックを読んでください。

 key = 'non-existent-key'
try:
  print(books_authors[key])
except KeyError:
  print('Sorry, this key does not exist!')
  • try ブロックは、指定されたキーに対応する値の取得を試みます。
  • キーが存在しない場合、インタプリタは KeyError を生成します。これは、 Except ブロック内で例外として処理されます。

#3. .get() メソッドの使用

Python では、組み込みの辞書メソッド .get() を使用して、欠落しているキーを処理できます。

get() メソッドを使用する一般的な構文は dict.get(key,default_value) です。ここで、 dict は Python の有効な辞書オブジェクトです。

– キーが辞書に存在する場合、 get() メソッドは値を返します。
– それ以外の場合は、デフォルト値を返します。

この例では、 keys はアクセスしたい値を持つキーのリストです。キー リストをループして、 books_authors 辞書から対応する値を取得します。

ここでは、デフォルト値として「存在しません」を指定して .get() メソッドを使用しました。

 keys = ['Grit','Hyperfocus','Make Time','Deep Work']
for key in keys:
  print(books_authors.get(key,'Does not exist'))

上記のコードでは次のようになります。

  • books_authors 辞書に存在するキーの場合、 .get() メソッドは対応する値を返します。
  • キーが存在しない場合 (この場合は「Grit」と「Make Time」)、.get() メソッドはデフォルト値「存在しません」を返します。
 # Output

Does not exist
Chris Bailey
Does not exist
Cal Newport

上記のすべての方法は、重要なエラーを処理するのに役立ちます。ただし、これらは冗長であり、不足しているキーを明示的に処理する必要があります。通常の辞書の代わりに defaultdict を使用すると、このプロセスを簡素化できます。

Python の Defaultdict

python-defaultdict
python-defaultdict

defaultdict は、辞書 ( dict ) クラスのサブクラスです。したがって、Python 辞書の動作を継承します。さらに、不足しているキーもネイティブに処理します。

defaultdict は collections モジュール内の Python 標準ライブラリに組み込まれているコンテナ データ型です。

したがって、それを作業環境にインポートする必要があります。

 from collections import defaultdict

以下は、 defaultdict 使用するための一般的な構文です。

 defaultdict(default_factory)

int、float、list などの呼び出し可能オブジェクトを default_factory 属性として指定できます。 default_factory の値を指定しない場合、デフォルトの None になります。

探しているキーが存在しない場合、 __missing__() メソッドがトリガーされ、 default_factory からデフォルト値が推測されます。その後、このデフォルト値を返します。

要約すれば:

  • Python では、キーが存在しない場合、 defaultdict デフォルト値を返します。
  • また、このキーとデフォルト値のペアがディクショナリに追加され、後で変更できるようになります。

Python の Defaultdict の例

デフォルト辞書-例-1
デフォルト辞書-例-1

次に、Pythonのdefaultdictがどのように機能するかを理解するために、いくつかの例をコーディングします。

デフォルトの整数値を使用した Python の Defaultdict

まず、 collections モジュールから defaultdict インポートします。

 from collections import defaultdict
import random

prices を作成しましょう。

 prices = defaultdict(int)

次に、 fruits リストの項目をキーとして使用して、 prices 辞書を作成します。そして、 price_list から値をランダムにサンプリングして値を取得します。

 price_list = [10,23,12,19,5]
fruits = ['apple','strawberry','pomegranate','blueberry']

for fruit in fruits:
  prices[fruit] = random.choice(price_list)

prices defaultdict内のキーと値のペアを見てみましょう。

 print(prices.items())
 dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10)])

通常の Python 辞書と同様に、次のキーを使用して prices のdefaultdictの値にアクセスできます。

 prices['apple']
# 23

ここで、存在しない果物、たとえば「オレンジ」の価格にアクセスしてみましょう。 デフォルト 値のゼロが返されることがわかります。

 prices['orange']
# 0

辞書を出力すると、新しいキー「オレンジ」がデフォルトの整数値ゼロで追加されていることがわかります。

 print(prices.items())
 dict_items([('apple', 12), ('blueberry', 19), ('pomegranate', 5), ('strawberry', 10), ('orange', 0)])

リストをデフォルト値として使用する Python の Defaultdict

students_majors リストの defaultdict として定義しましょう。メジャーの名前が鍵となります。そして、その値は、数学、経済学、コンピューター サイエンスなどの各専攻を追求する学生のリストです。

 from collections import defaultdict
students_majors = defaultdict(list)

「経済学」に対応する学生リストにアクセスしようとすると、defaultdict は空のリストを返します。キーエラーはありません!

 students_majors['Economics']
# []

これで、「経済学」専攻にマッピングされた空のリストができました。したがって、リスト メソッド .append() を使用して、このリストに要素を追加できるようになりました。

 students_majors['Economics'].append('Alex')

students_majors デフォルト辞書に「経済学」のエントリが作成されました。

 print(students_majors)
 defaultdict(<class 'list'>, {'Economics': ['Alex']})

経済学専攻にマッピングするリストに学生を追加したり、新しい専攻を追加したりすることができます。

 students_majors['Economics'].append('Bob')
students_majors['Math'].append('Laura')
print(students_majors)
 defaultdict(<class 'list'>, {'Economics': ['Alex', 'Bob'], 'Math': ['Laura']})

結論

このチュートリアルが、Python で defaultdict を いつどのように使用する必要があるかを理解するのに役立つことを願っています。このチュートリアルのコード例を実行した後、必要に応じて、プロジェクト内の優先データ構造としてdefaultdictを使用してみることができます。

このチュートリアルで学んだことの概要を次に示します。

  • Python 辞書を使用していると、KeyError に遭遇することがよくあります。
  • このような KeyError を処理するには、いくつかの詳細なメソッドを使用できます。条件文、try-excel ブロッ​​ク、または .get() メソッドを使用できます。ただし、コレクション モジュールの defaultdict データ型を使用すると、この KeyError 処理を簡素化できます。
  • defaultdict(default_factory) を使用できます 。default_factory は 有効な呼び出し可能です。
  • キーがdefaultdictに存在しない場合、デフォルト値( default_factory から推測)とキーがdefaultdictに追加されます。

次に、Python のマップ関数に関するチュートリアルを確認してください。

「 Python で Defaultdict をいつどのように使用する必要がありますか?」についてわかりやすく解説!絶対に観るべきベスト2動画

Simplifying code with defaultdict in python
【Pythonプログラミング】並列処理の基本を解説!マルチスレッド・マルチプロセスをconcurrent futuresで実装!