Python の関数を実際にどのように使用するかについてのわかりやすい説明を見つけることができませんでしたitertools.groupby()
。私がやろうとしているのは次のことです:
lxml
リストを取る - この場合はオブジェクト化された要素の子- いくつかの基準に基づいてグループに分ける
- その後、これらの各グループを個別に反復処理します。
私はレビューしましたドキュメントしかし、単純な数字のリストを超えてそれらを適用しようとすると、困難が生じます。
では、 of はどのように使用すればよいのでしょうかitertools.groupby()
? 使用すべき別のテクニックはありますか? 適切な「前提条件」の読み物へのポインタもいただければ幸いです。
ベストアンサー1
重要な注意:最初にデータを並べ替える必要がある場合があります。
私が理解できなかったのは、例文の構成では
groups = []
uniquekeys = []
for k, g in groupby(data, keyfunc):
groups.append(list(g)) # Store group iterator as a list
uniquekeys.append(k)
k
は現在のグループ化キーであり、g
そのグループ化キーによって定義されたグループを反復処理するために使用できる反復子です。つまり、groupby
反復子自体は反復子を返します。
より明確な変数名を使用した例を次に示します。
from itertools import groupby
things = [("animal", "bear"), ("animal", "duck"), ("plant", "cactus"), ("vehicle", "speed boat"), ("vehicle", "school bus")]
for key, group in groupby(things, lambda x: x[0]):
for thing in group:
print("A %s is a %s." % (thing[1], key))
print("")
出力は次のようになります:
クマは動物です。
アヒルも動物です。サボテンは植物です。
スピードボートは乗り物です。
スクールバスも乗り物です。
この例では、things
各タプルの最初の項目が 2 番目の項目が属するグループであるタプルのリストです。
このgroupby()
関数は、(1) グループ化するデータと (2) グループ化に使用する関数の 2 つの引数を取ります。
ここでは、各タプルの最初の項目をグループ化キーとして使用するようにlambda x: x[0]
指示します。groupby()
上記のfor
ステートメントでは、groupby
3 つの (キー、グループ反復子) ペアが返されます (一意のキーごとに 1 回ずつ)。返された反復子を使用して、そのグループ内の個々の項目を反復処理できます。
以下は、リストの内包表記を使用して同じデータを使用した、少し異なる例です。
for key, group in groupby(things, lambda x: x[0]):
listOfThings = " and ".join([thing[1] for thing in group])
print(key + "s: " + listOfThings + ".")
出力は次のようになります:
動物: クマとアヒル。
植物: サボテン。
乗り物: スピードボートとスクールバス。