概要
- Pythonで辞書やリストを
for
文で回して値を取得する際にいくつか種類があるのでまとめてみました。 - 今回は、辞書(リスト)
ip_addresses
の要素を反復処理し、各要素の値を表示するためのループを使用しています。 - 辞書で4種類、リストで4種類、おまけで2つ、合計10種類をまとめてみました。
辞書の場合:4種類を紹介
①[辞書]for
ループで値をiに代入して出力する方法
ip_addresses = {'ip_address-1':'111.111.11.11', 'ip_address-2':'222.222.22.22'}
for i in ip_addresses.values():
print(i)
# 111.111.11.11
# 222.222.22.22
- 値そのものを取得しています。ループの各イテレーションで変数
i
には辞書の値が代入されますので、その値を直接表示します。 - 辞書内のすべての値に順番にアクセスできます。
- 値だけを使用して処理を行う場合は、こちらが良いかもしれません。
②[辞書]for
ループでキーをiに代入して出力する方法
ip_addresses = {'ip_address-1':'111.111.11.11', 'ip_address-2':'222.222.22.22'}
for i in ip_addresses:
print(ip_addresses[i])
# 111.111.11.11
# 222.222.22.22
- キーを使ってて各要素にアクセスし値を取得しています。ループの各イテレーションで変数
i
には辞書のキーが代入されます。それからip_addresses[i]
を使用して、辞書の値を取得して表示します。 - キーと値の両方を使用して何か処理を行いたい場合は、これを使うと良いかもしれません。
③[辞書]for
ループとitems()
メソッドを使用して出力する方法
ip_addresses = {'ip_address-1':'111.111.11.11', 'ip_address-2':'222.222.22.22'}
for key, value in ip_addresses.items():
print(value)
# 111.111.11.11
# 222.222.22.22
-
items()
メソッド(辞書のキーと値のペアを要素とするイテレータを返すメソッド)を使用して辞書のキーと値のペアに順番にアクセスします。 -
for
ループでは、各ループイテレーションごとにキーと値が変数key
とvalue
にアンパックされ、それぞれの値が出力されます。
④[辞書]for
ループとkeys()
メソッドを使用して出力する方法
ip_addresses = {'ip_address-1':'111.111.11.11', 'ip_address-2':'222.222.22.22'}
for key in ip_addresses.keys():
value = ip_addresses[key]
print(value)
# 111.111.11.11
# 222.222.22.22
- ↑はちょっと無理矢理な気もしますが...
keys()
メソッドを使用して辞書のキーを取得し、それを使用して値にアクセスする方法もあります。
リストの場合:4種類を紹介
⑤[リスト]for
ループで直接リストの要素にアクセスする方法
ip_addresses = ['111.111.11.11', '222.222.22.22']
for i in ip_addresses:
print(i)
# 111.111.11.11
# 222.222.22.22
- Pythonでは、リストに対しても
for
文で要素を取り出すことができます。
⑥[リスト]for
ループとインデックスを使用して出力する方法
ip_addresses = ['111.111.11.11', '222.222.22.22']
print(len(ip_addresses))
# 2
for i in range(len(ip_addresses)):
print(ip_addresses[i])
# 111.111.11.11
# 222.222.22.22
-
len(ip_addresses)
はリストの要素数を取得します。 -
range(len(ip_addresses))
によって、インデックス範囲を表す数値のシーケンスを生成します。
⑦[リスト]enumerate()
を使用して出力する方法
ip_addresses = ['111.111.11.11', '222.222.22.22']
for index, value in enumerate(ip_addresses):
print(index, value)
# 0 111.111.11.11
# 1 222.222.22.22
-
enumerate()
関数は、イテラブル(リスト、タプル、文字列など)の要素とそれに対応するインデックスのペアを生成する関数。 -
for
ループでは、各イテレーションで現在の要素とそのインデックスがindex
とvalue
にアンパックされます。
⑧[リスト]iter()
関数とnext()
関数を使用して出力する方法
ip_addresses = ['111.111.11.11', '222.222.22.22']
iter_ip_addresses = iter(ip_addresses)
print(next(iter_ip_addresses))
print(next(iter_ip_addresses))
# 111.111.11.11
# 222.222.22.22
-
iter()
関数は、与えられたオブジェクトからイテレータを作成するための組み込み関数。 - イテレータを使うことで、要素を逐次的に取り出すことができますが...まぁここまでやるなら直接
for
ループで取り出すのが一般的ですかね笑
おまけ:[リスト]&[辞書]リスト内包表記を使用する方法
# ⑨辞書の場合
ip_addresses = {'ip_address-1': '111.111.11.11', 'ip_address-2': '222.222.22.22'}
values = [value for value in ip_addresses.values()]
print(values)
# ['111.111.11.11', '222.222.22.22']
# ⑩リストの場合
ip_addresses = ['111.111.11.11', '222.222.22.22']
values = [value for value in ip_addresses]
print(values)
# ['111.111.11.11', '222.222.22.22']
## もしくは
ip_addresses = ['111.111.11.11', '222.222.22.22']
[print(value) for value in ip_addresses]
# 111.111.11.11
# 222.222.22.22
- リスト内包表記、ほぼ使ったことないのですが、無理矢理使うとこうなりますね。
- ただ、リスト内包表記は効率的に新しいリストを作成するためのものなので、これはあまり推奨されないでしょう。