LoginSignup
0
1

【Python】ループで辞書やリストの値を取得する方法を合計10種類まとめてみた

Posted at

概要

  • 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ループでは、各ループイテレーションごとにキーと値が変数keyvalueにアンパックされ、それぞれの値が出力されます。

④[辞書]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ループでは、各イテレーションで現在の要素とそのインデックスがindexvalueにアンパックされます。

⑧[リスト]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
  • リスト内包表記、ほぼ使ったことないのですが、無理矢理使うとこうなりますね。
  • ただ、リスト内包表記は効率的に新しいリストを作成するためのものなので、これはあまり推奨されないでしょう。
0
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1