初めて見る人には意味がわからないけど使い始めると手放せないリスト内包表記ですが、しばらくPythonから離れていると忘れることがあるので、使い方をメモってみました。
ディクショナリのリストから特定のキー値のみを取り出す
まずはシンプルに、プロフィールのリストから氏名を取り出します。
profiles = [
{"name": "Tanaka", "age": 17},
{"name": "Suzuki", "age": 18},
{"name": "Sato", "age": 19},
]
names = [p["name"] for p in profiles]
print(names)
結果は、こんな感じになります。
['Tanaka', 'Suzuki', 'Sato']
条件付きで値を取り出す
年齢による縛りを入れてみます。18歳以上の氏名のみを取り出します。
profiles = [
{"name": "Tanaka", "age": 17},
{"name": "Suzuki", "age": 18},
{"name": "Sato", "age": 19},
]
names = [p["name"] for p in profiles if p["age"] >= 18]
print(names)
Tanakaさんは18歳未満なので除外されます。
['Suzuki', 'Sato']
結果をディクショナリにする
リストからディクショナリに変換してみます。
profiles = [
{"name": "Tanaka", "age": 17},
{"name": "Suzuki", "age": 18},
{"name": "Sato", "age": 19},
]
names = {p["name"]: p["age"] for p in profiles}
print(names)
氏名が被っているとおかしくなりますが、この例では大丈夫。
{'Tanaka': 17, 'Sato': 18, 'Suzuki': 18}
もう少しリッチなディクショナリにしてみる
ちょっと強引ですが、年齢ごとに氏名のリストを作ってみます。
profiles = [
{"name": "Tanaka", "age": 17},
{"name": "Suzuki", "age": 18},
{"name": "Sato", "age": 18},
]
names = {
p2["age"]: [
p1["name"] for p1 in profiles if p1["age"] == p2["age"]
]
for p2 in profiles}
print(names)
こんな感じです。
{17: ['Tanaka'], 18: ['Suzuki', 'Sato']}