0xf

日記だよ

リスト内包表記で改行入れるとスマートじゃん

こういう話。

fruit = ["apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew"]

fruit_dict = {
    name: len(name)
    for name in fruit
    if name.endswith("e")
}

print(fruit_dict) #=> {'apple': 5, 'date': 4, 'grape': 5}

辞書を返すリストだと

fruit = ["apple", "banana", "cherry", "date", "elderberry", "fig", "grape", "honeydew"]

fruit_list = [
    { "name": name, "name_len": len(name) }
    for name in fruit
    if name.endswith("e")
]

print(fruit_list) #=> [{'name': 'apple', 'name_len': 5}, {'name': 'date', 'name_len': 4}, {'name': 'grape', 'name_len': 5}]

こうなって、ぐっとSQLのSELECTと似た見た目になる。

GROUP BY とか ORDER BY 相当の宣言的処理は書けないけど、python のリストは全部数え上げイテレータだという概念的な理解になっているのであまり不満はない。ストリームに対しての基本操作はフィルタと変換と複製であるから。

そういえば .NETEnumerableGroupBy()とかReverse() 書けたな...。でもあれは個人的には少し過剰だと思っている。