【Python】dict for文について
- 基本的なdictのfor文
- キーのループ処理
- 値のループ処理
- キーと値の同時ループ処理
- 辞書内包表記(dict comprehension)
- 実用的な使用例
- ネストされた辞書のループ処理
- パフォーマンスの考慮
基本的なdictのfor文
Pythonの辞書(dict)はキーと値のペアを持つデータ構造で、for文を使って簡単にループ処理ができます。
my_dict = {"a": 1, "b": 2, "c": 3}
for key in my_dict:
print(key, my_dict[key])
このコードでは、辞書の各キーを取得し、それに対応する値を表示しています。
キーのループ処理
辞書のキーだけを取得したい場合は、keys()
メソッドを使用します。
my_dict = {"apple": 10, "banana": 20, "cherry": 30}
for key in my_dict.keys():
print(key)
この方法は、明示的に「キーだけをループする」ことを示したい場合に便利です。
値のループ処理
辞書の値だけをループしたい場合は、values()
メソッドを使います。
my_dict = {"apple": 10, "banana": 20, "cherry": 30}
for value in my_dict.values():
print(value)
この方法は、キーに関係なく値だけを処理したい場合に役立ちます。
キーと値の同時ループ処理
items()
メソッドを使用すると、キーと値を同時に取得できます。
my_dict = {"apple": 10, "banana": 20, "cherry": 30}
for key, value in my_dict.items():
print(f"{key} : {value}")
この方法は、キーと値の両方を使って処理を行う場合に便利です。
辞書内包表記(dict comprehension)
辞書内包表記(dictionary comprehension)を使うと、簡潔に辞書を作成できます。
squared = {x: x**2 for x in range(5)}
print(squared) # {0: 0, 1: 1, 2: 4, 3: 9, 4: 16}
条件を加えることもできます。
even_squares = {x: x**2 for x in range(10) if x % 2 == 0}
print(even_squares) # {0: 0, 2: 4, 4: 16, 6: 36, 8: 64}
実用的な使用例
辞書のfor文はさまざまな場面で役立ちます。例えば、辞書をリストに変換するケースです。
my_dict = {"apple": 10, "banana": 20, "cherry": 30}
# キーのリスト
keys_list = list(my_dict.keys())
print(keys_list) # ['apple', 'banana', 'cherry']
# 値のリスト
values_list = list(my_dict.values())
print(values_list) # [10, 20, 30]
また、辞書のデータをフィルタリングする場合にも便利です。
prices = {"apple": 100, "banana": 50, "cherry": 200}
# 100円以上の商品のみを抽出
expensive = {k: v for k, v in prices.items() if v >= 100}
print(expensive) # {'apple': 100, 'cherry': 200}
ネストされた辞書のループ処理
辞書の中に辞書がある場合(ネストされた辞書)、for文をネストして処理できます。
nested_dict = {
"fruit": {"apple": 100, "banana": 50},
"vegetable": {"carrot": 30, "spinach": 40}
}
for category, items in nested_dict.items():
print(f"{category}:")
for name, price in items.items():
print(f" {name} - {price}")
この方法を使うと、カテゴリごとに整理されたデータを簡単に処理できます。
パフォーマンスの考慮
大規模な辞書を処理する場合、辞書内包表記を使うと処理が速くなることがあります。
import time
large_dict = {i: i**2 for i in range(1000000)}
# 普通のfor文
start = time.time()
filtered = {}
for k, v in large_dict.items():
if v % 2 == 0:
filtered[k] = v
end = time.time()
print(f"普通のfor文: {end - start:.5f}秒")
# 辞書内包表記
start = time.time()
filtered_comp = {k: v for k, v in large_dict.items() if v % 2 == 0}
end = time.time()
print(f"辞書内包表記: {end - start:.5f}秒")
このように、辞書内包表記のほうが処理が速くなる場合があります。
Pythonの辞書のfor文を使いこなせば、データの操作がより効率的に行えるようになります。ぜひ活用してみてください!