HOWTO · Python

Python 辞書の最初のキーを取得する方法

next()、リストへの変換、for ループ、および空の辞書に対する安全なデフォルト値を使って、Python 辞書イテレータが生成する最初のキーを取得する方法を学びます。

このページの内容

Python 辞書が生成する最初のキーを取得するには、next(iter(my_dict)) を呼び出します。これにより、辞書イテレータからキーを直接読み取ります。この例では、辞書に名前と都市が含まれており、プログラムは最初に生成されたキーを出力します。

my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)

辞書における「最初」の意味

辞書はキーに対する数値インデックスを提供しません。ここで「最初」とは、Python が辞書を反復処理するときに生成される最初のキーを意味します。順序付き辞書では、反復は挿入順序に従うため、最初のキーは最も早く挿入されたキーです。マッピングが異なる反復順序を使用する場合、「最初」はそのマッピングの反復動作に従います。この定義は反復の結果を説明するものであり、すべてのマッピングが同じ方法でキーを順序付けると仮定するものではありません。

辞書の反復はデフォルトでキーを生成します。そのため、辞書を iter() や for ループに直接渡すことができます。先に keys() を呼び出す必要はありません。my_dict.keys() メソッドは、そのビューを個別に確認したり再利用したりする必要がある場合に、キーの動的ビューを返します。

next() で最初のキーを取得する

iter() を使用して辞書に対するイテレータを作成し、次に next() を使用してその次の要素を取得します。辞書イテレータはキーを生成するため、この方法では、すべてのキーの別個のリストを構築することなく 1 つのキーを読み取ります。空でない辞書の場合、必要なキーが 1 つだけなら、これが簡潔な選択肢です。

my_dict = {"name": "Ada", "city": "London"}
first_key = next(iter(my_dict))
print(first_key)

first_key の値は、反復によって生成された最初のキーです。next() はオプションのデフォルト値も受け付けます。これは、辞書にキーが存在しない可能性がある場合に便利です。最後のセクションでは、この形式を示します。

list() で最初のキーを取得する

キーもリストとして必要な場合は、辞書をリストに変換し、インデックス 0 を選択します。list() に渡された辞書はそのキーを生成するため、先に keys() を呼び出す必要はありません。

my_dict = {"name": "Ada", "city": "London"}
first_key = list(my_dict)[0]
print(first_key)

この変換では、1 つを選択する前にすべてのキーが実体化されます。必要なキーが 1 つだけの場合は、イテレータ方式を使用してください。リストへの変換は、結果のリストをインデックス付け、スライス、または別のリスト操作で使用する場合に便利です。インデックス 0 はリストにキーが含まれていることを必要とするため、この形式は、辞書が空である可能性がある場合には、事前に確認しない限り適していません。

for ループで最初のキーを取得する

for ループは辞書のキーを直接反復処理します。最初のキーを代入し、その反復の後に break を使用して停止します。

my_dict = {"name": "Ada", "city": "London"}
for key in my_dict:
    first_key = key
    break
print(first_key)

この方法は、すでにループを使用しているコードや、停止する前にキーを使って操作を実行する必要があるコードに適しています。すべてのキーをリストに変換することを避けられます。値を使用しない場合、ループに items() は必要ありません。辞書にキーが含まれていない場合、ループ本体は決して実行されないため、その後に first_key を使用するコードは、その可能性を考慮する必要があります。

空の辞書を処理する

辞書にキーがないときに next(iter(my_dict)) を呼び出すと、StopIteration が発生します。代わりにフォールバックを返すように、next() に 2 番目の引数を渡します。

my_dict = {}
first_key = next(iter(my_dict), None)
print(first_key)

ここでは、None がフォールバックです。有効な辞書キーと混同されることのないデフォルト値を選択してください。データで None がキーになり得る場合は、一意のセンチネルオブジェクトを作成し、それをデフォルト値として使用します。

my_dict = {"name": "Ada", "city": "London"}
sentinel = object()
first_key = next(iter(my_dict), sentinel)
if first_key is sentinel:
    print("No keys")
else:
    print(first_key)

list(my_dict)[0] を使うリスト方式にはデフォルト引数がなく、キーがない場合は IndexError が発生します。インラインのフォールバックによって空の入力に対する動作が扱いやすくなる場合は、next(iter(my_dict), default) を使用してください。