在线提交需求

请留下您的联系方式,我们的专家将在 24 小时内与您沟通。

极奇策RPA技术教程:自定义排序 (NodeSortedKey) - 自动化开发与配置详细指南

极奇策技术团队更新于 2026-08-310 阅读

image.png

自定义排序

📖 节点概述

对列表进行自定义排序,支持通过指定的排序键(如字典键、对象属性或表达式)来决定排序顺序。适用于列表元素为字典、对象或复杂结构的场景。提供升序/降序选项。如果排序键表达式无效或排序过程出错,将返回原始列表(顺序不变)。该节点为纯数据节点,无执行端口。

💡 使用场景

  • 按对象属性排序:对用户对象列表按年龄、姓名等属性排序。
  • 按字典键值排序:对字典列表按某个键(如价格、评分)排序。
  • 嵌套属性排序:按 {"user": {"age": 20}} 中的 user.age 排序。
  • 自定义计算排序:通过 lambda 表达式按字符串长度、绝对值等动态计算排序依据。
  • 降序显示:展示排行榜、新消息等需要倒序排列的场景。

🎮 实战连线指南:如何正确使用它?

节点有两个主要输入端口:列表(待排序的列表)和 排序键(排序依据表达式),以及一个高级选项 降序。输出端口 排序后列表

场景案例:按用户年龄升序排序

  1. 准备列表:传入或手动输入用户列表(JSON 格式):
    [{"name": "张三", "age": 25}, {"name": "李四", "age": 30}, {"name": "王五", "age": 20}]
    
  2. 设置排序键:输入 age(表示按字典中的 age 键排序)。
  3. 降序:不勾选(默认为升序)。
  4. 获取结果:排序后列表变为:
    [{"name": "王五", "age": 20}, {"name": "张三", "age": 25}, {"name": "李四", "age": 30}]
    

嵌套属性示例(假设列表元素为对象或嵌套字典):

  • 列表元素格式:{"user": {"age": 20}}
  • 排序键:user.age(点号路径)
  • 结果:按 user.age 值排序。

字典索引表达式示例

  • 排序键:x['price'](结果等同于直接写 price,但支持很复杂的键名)
  • 结果:按字典中 price 键的值排序。

lambda 表达式示例

  • 列表:["apple", "banana", "cherry"]
  • 排序键:lambda x: len(x)(按字符串长度排序)
  • 结果:["apple", "cherry", "banana"](长度 5, 6, 6;注意稳定排序)

降序示例

  • 列表:[5, 2, 8, 1]
  • 排序键:留空(直接对元素本身排序)
  • 降序:勾选
  • 结果:[8, 5, 2, 1]

⚙️ 引脚与参数说明

📥 输入引脚

引脚名称数据类型说明
列表LIST待排序的列表。支持列表对象、JSON 数组字符串或多行文本(每行一个元素)。
排序键STRING排序依据表达式。支持以下格式:<br>• 简单键名:如 agename。<br>• 点号路径:如 user.ageinfo.city。<br>• 字典索引:如 x['price']。<br>• lambda 表达式:如 lambda x: len(x)。<br>留空则直接对列表元素本身排序。

⚙️ 控件参数

控件名称类型说明
列表多行文本框手动输入列表内容(每行一个元素,或 JSON 数组)。连线时优先使用连线值。
排序键单行文本框手动输入排序表达式。
降序复选框(高级)勾选后按降序(从大到小)排列,否则按升序(从小到大)。

📤 输出引脚

引脚名称数据类型说明
排序后列表LIST排序后的新列表(原列表不会被修改)。若排序失败,返回原列表。

🔧 排序键表达式详解

节点会尝试将用户输入的表达式解析为排序函数(类似 Python 的 key 参数):

  1. 简单键名/嵌套路径:如 ageuser.age。节点会按点号拆解路径,依次从字典或对象中取值。
  2. 字典索引形式:如 x['price'],内部提取 price 作为键名。
  3. lambda 表达式:如 lambda x: x['age']lambda x: x.age。节点会在受限环境中执行(仅提供基本内置函数),请确保表达式安全。
  4. 回退机制:若以上均不匹配,将表达式作为属性名或字典键名直接取值。

⚠️ 注意事项

  • 排序稳定性:对于值相等的情况,保持原列表中的相对顺序(稳定排序)。
  • 类型一致性:排序键提取的值应具有可比性(如数字与数字、字符串与字符串)。混合类型可能导致排序失败,此时返回原列表。
  • lambda 表达式安全:节点内部限制了 __builtins__,但仍建议仅使用简单表达式(如 lambda x: x['age']),避免复杂逻辑。
  • 性能:排序时间复杂度 O(n log n),键函数对每个元素调用一次。
  • 空列表或无效列表:返回空列表或原列表(不报错)。
  • 手动输入 JSON:若在文本框输入 JSON 数组,必须使用双引号(如 [{"a":1}]),否则可能解析失败。

💎 小贴士

  • 需要按字符串长度、绝对值等计算值时,lambda 表达式是灵活的方式。
  • 对于简单字典键排序,直接写键名即可,无需 x['key'] 形式。
  • 若列表元素是基本类型(数字、字符串),可将排序键留空,直接排序。
  • 输出结果可直接用于【列表截取】获取前 N 名(Top N)。
  • 由于是纯数据节点,无需执行信号,可在数据流中随时使用。
助理
咨询
微信
微信客服扫码添加微信
社群
QQ群扫码加入Q群
电话
免费咨询热线0371-67993886
顶部