Difyのリスト処理で件数が減ったら、入力、フィルター後、並べ替え後、トップN適用後を分けて確認します。 最終結果だけを見ても、条件で除外されたのか、上位件数の制限なのか、配列の先頭一件を渡してしまったのかを区別できません。

対象は、コードノードなどから配列を渡せる段階で、リスト処理の順番や出力変数に迷っている人です。まずLLMや外部APIを挟まず、八個の固定値で確認する設計を紹介します。ファイルを分類したい場合にも、最初は小さな入力で各段階を見えるようにする考え方が使えます。

公式資料確認日:2026年10月24日。List Operator、Code、If-Else、Output、Iterationを参照しています。以下は編集部が設計した確認用の教材です。Pythonの参照計算はローカルで実行確認していますが、Dify Cloudでの実行結果や有料モデルの利用体験としては記載していません。自分の環境の版・表示と照合してください。

入力8件から10以上を残すと4件。降順にしても4件のまま。トップ3を適用すると40・25・10の3件になる確認図。
件数を変える処理と、順番だけを変える処理を別々に点検します。

リスト処理の設定は、配列の型と四つの段階で読む

リスト処理とイテレーションの役割を分ける

リスト処理は、配列から条件に合う要素を選び、並び順や使う件数を整えるためのノードです。配列の全要素に同じ処理を一つずつ実行したい場合は、イテレーションの役割になります。似た画面の例を組み合わせる前に、今回は何をしたいかを決めます。

例えば八件から上位三件を選ぶことと、八件それぞれの文章を要約することは別です。前者は選別、後者は反復処理です。選別前の八件をイテレーションへ渡してから、表示だけ三件へ絞っても、後続の実行対象を三件に限定したことにはなりません。

本稿では数値を選ぶところまでを扱い、AIに優先度を判断させません。数値の意味も架空の処理用スコアで、業務上の人物評価や採否には使いません。数字が大きい順に並べられたことから、その並びが現場の優先順位として適切だとは結論しないでください。

反復処理の途中でエラーが起き、成功分だけが残る問題は、イテレーションの出力件数を確認する手順で別に扱っています。今回の「条件で落とした」「上限で切った」と、失敗結果が除かれたことを混ぜないのがポイントです。

数値の配列と、数字が入った文字列を確認する

入力を見た目だけで判断しないでください。数値の2、10、3と、文字列の「2」「10」「3」は、並べ替えたときの意味が違います。文字列の並びを数値の大小のつもりで読むと、10が2より前に出る結果を不具合と見なしてしまいます。

配列全体が文字列に入っている場合も別です。角括弧やカンマが見えても、それが一つのテキストとして渡っているなら数値配列ではありません。上流ノードの実際の出力型と、リスト処理が参照している変数の型を確認します。

numeric_order = sorted([2, 10, 3])
text_order = sorted(["2", "10", "3"])
assert numeric_order == [2, 3, 10]
assert text_order == ["10", "2", "3"]
print(numeric_order, text_order)

これはPythonで違いを確かめる参照計算です。Dify上でも、入力の型を数値配列として指定したかを確認する教材に使います。別の言語や環境の文字照合順まで同一だと推測せず、数値の大小を使いたいなら、数値として渡す設計を先に整えましょう。

コードノードを使う場合は、返した辞書のキーと出力変数名も合わせます。変数名は合っていても、Stringのまま配列を返していると別の出力エラーになります。コードノードの変数名・型の確認で、入力側の問題を先に切り分けてください。

フィルターは、残す条件と境界値を一つずつ試す

教材の八件は2、10、3、25、10、0、マイナス1、40です。「10以上を残す」なら10、25、10、40の四件が対象です。「10より大きい」なら25と40の二件になります。条件の境界にある10を含めるかどうかで、最初の件数が変わります。

同じ10が二件あることにも注目してください。値が同じというだけで、フィルターが自動で一件へまとめることは想定しません。重複を除く要件があるなら、別の処理として設計します。今回の確認では、二つの10を別要素として残します。

フィルターを試すときは、並べ替えや上位Nの指定をまだ有効にせず、四件が残るかを確認する段階を設けます。八件が二件になったなら、厳密な不等号を使っていないか、しきい値が想定と違わないかを見ます。結果が空なら、まず入力値と比較条件を並べます。

教材で確認するフィルターの違い
条件期待する値件数
10以上10, 25, 10, 404件。同値の10は二つとも残す
10より大きい25, 402件。境界の10は除く
50以上該当なし0件。入力8件が消えた原因を条件で説明できる

条件を文章にして控えることも役立ちます。「大きいものを残す」では、等しい値や負の値をどう扱うかが曖昧です。「数値として10以上、同値は別要素のまま残す」と書けば、設定画面の比較方法と照合しやすくなります。

ソートは件数を保ち、ASCとDESCで先頭が変わる

10以上の四件を数値の降順に並べると40、25、10、10です。昇順なら10、10、25、40です。並び替えだけなら、対象の四件を三件や二件へ減らすことは、この教材の仕様ではありません。件数が変わったら、ほかの設定も同時に有効になっていないか確認します。

大きい値から使いたい場合はDESC、小さい値から使いたい場合はASCを選びます。「先頭が最新」になるかどうかは、何をソートしているかによります。数値の大きさだけを並べた結果を、日付や優先度の順だと読み替えないようにします。

ファイル配列の場合は、名前やサイズなどの属性が関係します。同じ「降順」でも、ファイルサイズの降順とファイル名の降順では選ばれる対象が変わります。まず一つの属性だけを選び、並べ替え前後の値を対応させて確認してください。

同じ値が並んだときの順序を、利用中の環境で確認していないまま業務の優先ルールにしないことも大切です。本稿の数値だけの教材では、同じ10のどちらが先かを区別できません。対象を特定する必要があるなら、上流で識別子と明示した同値ルールを持つ設計へ見直します。

トップNと、一件を取り出す出力変数を混同しない

降順の四件から先頭三件を使うなら、期待する配列は40、25、10です。公式資料のTake First Nは、フィルターとソートをした後の先頭1〜20件を選ぶ説明です。画面に似た名称の項目があっても、件数を指定する操作と、特定の位置の一件を選ぶ操作を区別してください。

resultは処理後の配列です。first_recordとlast_recordは、その先頭と末尾の一要素を扱う出力です。後続のイテレーションへ三件を渡すつもりでfirst_recordを選ぶと、配列全体を渡したことになりません。変数の名前だけでなく型も見ます。

降順のトップ3を使うときの期待する出力
選ぶもの教材の期待結果使う場面
result[40, 25, 10]という配列選ばれた三件を後続で一件ずつ処理する
first_record40という単一値先頭の一件だけを表示・利用する
last_record10という単一値今回選ばれた配列の末尾を確認する

トップ3をかけた後の末尾10は、入力八件の最後の40でも、フィルター前の最小値マイナス1でもありません。どの段階の配列の先頭・末尾なのかを意識します。スクリーンショットやメモには入力、設定、選んだ出力変数をセットで残しましょう。

「三番目だけ欲しい」と「先頭から三件欲しい」も別の要件です。項目名の翻訳だけで判断せず、八件の固定値を使ってresultと件数を確認します。自分の版で表示や項目が違う場合は、無理に同じ場所を押さず、公式資料と実際の出力を照合してください。

処理の順番も結果へ影響します。入力の先頭三件2、10、3を先に切り出し、その後10以上を残すと10の一件だけになります。全体から条件に合う四件を選び、降順にして先頭三件を取った40、25、10とは別の結果です。どちらも「三件を使う」と説明すると違いが見えないため、選別と並べ替えをどの段階で行ったかを残します。

最初の設定では、位置を指定する抽出や別の上限を同時に使わないようにすると、確認する条件を減らせます。使わない項目は、空欄に見えることだけで無効と判断せず、有効・無効の状態も確認してください。複数機能を有効にした完成形を一度にコピーするより、何も絞らない状態から一段ずつ期待件数を合わせる方が、意図しない設定を発見しやすくなります。

八件の固定値で確認し、空配列と後続処理まで点検する

LLMを挟まない確認用フローを作る

確認用の構成は、入力の入口、固定値を返すコードノード、リスト処理、出力です。最初は外部のファイルやAIの回答を配列へ変換する処理を外し、毎回同じ八件を渡せるようにします。これで入力が変わったせいなのか、設定の差なのかを区別しやすくなります。

コードノードでは不要な引数を使わず、valuesという名前で配列を返す教材にします。出力変数valuesの型は数値の配列として設定します。次のリスト処理では、このノードのvaluesを入力に選びます。文字列のJSONをそのまま返す構成とは分けてください。

def main() -> dict:
    return {"values": [2, 10, 3, 25, 10, 0, -1, 40]}

# 以下はローカルで教材の入力を確認するための検算です。
assert main()["values"] == [2, 10, 3, 25, 10, 0, -1, 40]
assert len(main()["values"]) == 8

設定は、まずフィルターだけ、次に降順、最後にトップ3の順に確認します。期待件数は八、四、四、三です。出力ノードにresultを選び、必要ならfirst_recordとlast_recordも別名で追加します。出力用の名前は重ねず、どの変数を表示したかが分かる名前にします。

現行のOutputはWorkflow用の結果表示で、ChatflowではAnswerを使います。フローが正常終了したのに呼び出し元へ値が見えない場合、処理の失敗と決め付ける前に、どの変数を出す設定か確認します。まず自分で見える結果を作り、それから複雑な後続処理へつなぎましょう。

この教材を確認するために有料モデルや外部APIの呼び出しを追加する必要はありません。ただし、利用中のワークスペースの実行枠・利用条件は別に確認してください。本稿はクラウドの実行料金や利用回数を保証する案内ではなく、設定を切り分ける練習です。

実行の記録には、使ったアプリとフローの版、開始時刻、入力八件、変更した設定、リスト処理に入った実際の値、ノードが返した値を残します。画面に表示されている前回の結果と、今回の実行結果を取り違えると、設定が反映されていないように見える場合があります。実行時刻と入力が今回のテストに対応しているかを先に確認してください。

下流の出力ノードでは一つの表示を見て終わらず、resultと先頭・末尾を別名で並べると、参照先の取り違えを見つけやすくなります。例えば配列が40、25、10で、先頭表示が40なら対応しています。配列は三件なのに最終画面が40だけなら、リスト処理で二件が消えたと考える前に、最終表示で単一値だけを選んでいないか調べます。

同じ期待結果を、短い参照コードで検算する

次はDifyノードそのものの実装ではなく、教材で期待する「10以上を残す、降順、先頭三件」の参照計算です。Difyの実出力とこの計算が違ったときに、どの段階で違い始めたかを調べるために使います。参照コードが動いたことを、クラウドの実行確認と取り違えないでください。

import math

def reference_numbers(values, threshold=10, limit=3):
    if not 1 <= limit <= 20:
        raise ValueError("教材の上限は1から20です")
    if any(isinstance(x, bool) or not isinstance(x, (int, float))
           or not math.isfinite(x) for x in values):
        raise ValueError("教材は有限の数値だけを受け取ります")
    filtered = [x for x in values if x >= threshold]
    ordered = sorted(filtered, reverse=True)
    selected = ordered[:limit]
    return {
        "input_count": len(values),
        "filtered_count": len(filtered),
        "sorted_count": len(ordered),
        "result": selected,
        "selected_count": len(selected),
        "first": selected[0] if selected else None,
        "last": selected[-1] if selected else None,
    }

example = reference_numbers(main()["values"])
assert [example[k] for k in ["input_count", "filtered_count", "sorted_count", "selected_count"]] == [8, 4, 4, 3]
assert example["result"] == [40, 25, 10]
assert example["first"] == 40 and example["last"] == 10
print(example)

計算を一行に縮めることより、四つの段階の件数が残ることを優先しています。filtered_countとsorted_countは四件で同じ、selected_countだけ三件です。この対応が分かれば、元の八件から五件が消えた理由を、条件で四件除外し、上位制限で一件除外したと説明できます。

参照計算のfirstやlastが空のときにNoneとなるのは、このコードで決めた仕様です。Difyの空配列時の単一出力の値や型まで、同じと断定していません。そこは自分の版の実出力を確認し、後続へ渡す前に空の分岐を設けて扱います。

空・同値・境界・上限を変えたケースを残す

通常の八件だけ通れば完成、とせず、空配列、条件未満だけ、同値だけ、上限一件なども確認します。設定の境界が分かるケースを足すと、「入力が少なかったから三件未満になった」と「三件あるのに一件だけを渡した」を区別できます。

cases = [
    ("通常", [2, 10, 3, 25, 10, 0, -1, 40], 10, 3, [40, 25, 10]),
    ("空", [], 10, 3, []),
    ("対象なし", [-1, 0, 2], 10, 3, []),
    ("同値", [10, 10, 10], 10, 3, [10, 10, 10]),
    ("一件", [10], 10, 3, [10]),
    ("トップ1", [2, 10, 3, 25, 10, 0, -1, 40], 10, 1, [40]),
    ("トップ20", [2, 10, 3, 25, 10, 0, -1, 40], 10, 20, [40, 25, 10, 10]),
    ("境界を11へ", [2, 10, 3, 25, 10, 0, -1, 40], 11, 3, [40, 25]),
]
for name, values, threshold, limit, expected in cases:
    actual = reference_numbers(values, threshold, limit)
    assert actual["result"] == expected, name
    assert actual["selected_count"] <= actual["filtered_count"] <= actual["input_count"]
print("参照計算の8ケースを確認しました")

上限三件は、足りない要素を補って三件へ増やす指示ではありません。条件に合う要素が一件しかないなら、教材では一件です。空になった場合に架空の値や同じ要素を追加すると、入力にあった内容と区別できなくなります。

条件を変えるときも、しきい値と上限を同時に変えないようにします。表へ変更前の設定、変更した一項目、期待結果、実際の出力を残せば、再現できる確認になります。長いチャットの末尾の一枚だけでは、どの設定を試したのか判断しにくいためです。

同じ値が続くテストでは、「重複を除く設定をしていないのに一つへ減ったか」と「トップNの位置で一部が残らなかったか」を分けます。通常の八件をトップ20で見ると二つの10が残り、トップ3だと一つだけになります。上限だけを変えた二つの結果を並べれば、重複削除の問題と決め付けずに説明できます。値の重複は、同じ依頼や同じファイルを二重に処理してよいかという業務上の判断とは別です。

参照コードへの文字列や真偽値の入力を止めているのは、今回の数値教材の条件を揃えるためです。Difyの対応型を制限するための仕様説明ではありません。数値の教材が通った後、文字列の練習やファイルの練習へ移る場合は、それぞれの条件と期待結果を別の表にします。異なる型を一つのテストへ混ぜ、何が通ったか分からなくすることを避けましょう。

空の結果と、ファイルを扱う場合の確認を分ける

数値の教材が理解できたら、実際の入力形式へ一段階ずつ近付けます。ファイル配列の場合は、数値に対する比較ではなく、type、拡張子、MIMEタイプ、名前、サイズなどの条件が関係します。数値用の「10以上」をそのままファイルへ適用することはできません。

ファイル名がpdfで終わることと、中身が想定した文書として読めることも別です。拡張子の条件を通った後にテキスト抽出ができないなら、ファイル選別と抽出のどちらの段階かを分けて確認します。PDFの表や文字の抽出確認も参考になります。

空のresultを後続へ渡す場合は、空であることを先に判定する分岐を考えます。件数0なら「対象がありません」と表示して終了する、確認用へ回すなど、目的に合う振る舞いを決めます。first_recordの値を無条件に数値として計算する設計は避けましょう。

条件分岐そのものの判定がずれる場合は、DifyのIF/ELSEで数値と空欄を確認する手順へ戻ります。0という有効な数値と空は同じではありません。今回0が除かれたのは「10以上」という条件のためで、未入力だからではないと説明できます。

元のファイルや行を特定したい場合は、数値だけへ変換する前の識別情報も残してください。二件ある10のどちらかを、値だけから後で復元することはできません。処理が進んだ後に必要な情報へ気付かないよう、選別の目的と引き継ぐ項目を先に決めます。

よくある質問と、確認結果を共有するチェック表

質問と回答

Q. フィルター後の件数が想定より少ないときは?
A.

入力の型と値、境界を含む条件かを確認します。教材では10以上なら四件、10より大きいなら二件です。ソートやトップNを外した段階から比較してください。

Q. 並べ替えだけで件数が減りますか?
A.

教材のソートは順番を変える処理で、四件は四件のままです。減った場合はフィルター、位置の抽出、トップN、選んだ出力変数も確認します。

Q. resultとfirst_recordは何が違いますか?
A.

resultは処理後の配列、first_recordは先頭の単一要素です。複数件をイテレーションへ渡すなら、入力が必要とする配列の型と合わせて選びます。

Q. トップ3なら出力は三件になりますか?
A.

条件に合う件数が三件未満なら、その分だけになる想定で確認します。足りない件数を埋める機能として扱わず、空や一件のケースも試してください。

Q. 同じ値が二つあるのに、トップN後に一つだけになりました。
A.

上限の位置で一方が選ばれなかった可能性があります。重複除去と決め付けず、フィルター後の件数、ソート後の全配列、選択した上限を順に確認します。

Q. Pythonの参照コードが動けばDifyでも確認済みですか?
A.

参照コードは期待結果を計算するための別実装です。Difyでの入力型、条件設定、実出力、後続の型は利用中の環境で別に確認する必要があります。

確認メモには、入力八件、条件10以上、DESC、トップ3、出力result、期待値40・25・10と書きます。実出力と違ったら、八→四→四→三のどこから変わったかを調べます。教材を自分の用途へ置き換える順序は、Difyの独学ロードマップにもまとめています。機能を増やす前に、入力と出力を説明できる一つの処理を仕上げましょう。

リスト処理の確認から、Difyを使った業務フローの学習へ進みたい人は、バイテックのDifyマスターコースも比較先になります。公式では申請フローやレポート自動化などの簡易システム構築を学ぶコースとして案内しています。今回の数値配列や空の分岐を質問できるか、必要なDify・モデルの利用料、サポート範囲と受講総額を、申込前に無料説明会で確認してください。本稿の八件の確認だけで解決した場合は、その成果を残して次の教材へ進めます。(公式情報確認日:2026年10月24日、バイテック公式)。

広告:バイテックのDify学習・無料説明会を確認する