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

自定义排序
📖 节点概述
对列表进行自定义排序,支持通过指定的排序键(如字典键、对象属性或表达式)来决定排序顺序。适用于列表元素为字典、对象或复杂结构的场景。提供升序/降序选项。如果排序键表达式无效或排序过程出错,将返回原始列表(顺序不变)。该节点为纯数据节点,无执行端口。
💡 使用场景:
- 按对象属性排序:对用户对象列表按年龄、姓名等属性排序。
- 按字典键值排序:对字典列表按某个键(如价格、评分)排序。
- 嵌套属性排序:按
{"user": {"age": 20}}中的user.age排序。 - 自定义计算排序:通过 lambda 表达式按字符串长度、绝对值等动态计算排序依据。
- 降序显示:展示排行榜、新消息等需要倒序排列的场景。
🎮 实战连线指南:如何正确使用它?
节点有两个主要输入端口:列表(待排序的列表)和 排序键(排序依据表达式),以及一个高级选项 降序。输出端口 排序后列表。
场景案例:按用户年龄升序排序
- 准备列表:传入或手动输入用户列表(JSON 格式):
[{"name": "张三", "age": 25}, {"name": "李四", "age": 30}, {"name": "王五", "age": 20}] - 设置排序键:输入
age(表示按字典中的age键排序)。 - 降序:不勾选(默认为升序)。
- 获取结果:排序后列表变为:
[{"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>• 简单键名:如 age、name。<br>• 点号路径:如 user.age、info.city。<br>• 字典索引:如 x['price']。<br>• lambda 表达式:如 lambda x: len(x)。<br>留空则直接对列表元素本身排序。 |
⚙️ 控件参数
| 控件名称 | 类型 | 说明 |
|---|---|---|
| 列表 | 多行文本框 | 手动输入列表内容(每行一个元素,或 JSON 数组)。连线时优先使用连线值。 |
| 排序键 | 单行文本框 | 手动输入排序表达式。 |
| 降序 | 复选框(高级) | 勾选后按降序(从大到小)排列,否则按升序(从小到大)。 |
📤 输出引脚
| 引脚名称 | 数据类型 | 说明 |
|---|---|---|
| 排序后列表 | LIST | 排序后的新列表(原列表不会被修改)。若排序失败,返回原列表。 |
🔧 排序键表达式详解
节点会尝试将用户输入的表达式解析为排序函数(类似 Python 的 key 参数):
- 简单键名/嵌套路径:如
age、user.age。节点会按点号拆解路径,依次从字典或对象中取值。 - 字典索引形式:如
x['price'],内部提取price作为键名。 - lambda 表达式:如
lambda x: x['age']或lambda x: x.age。节点会在受限环境中执行(仅提供基本内置函数),请确保表达式安全。 - 回退机制:若以上均不匹配,将表达式作为属性名或字典键名直接取值。
⚠️ 注意事项
- 排序稳定性:对于值相等的情况,保持原列表中的相对顺序(稳定排序)。
- 类型一致性:排序键提取的值应具有可比性(如数字与数字、字符串与字符串)。混合类型可能导致排序失败,此时返回原列表。
- lambda 表达式安全:节点内部限制了
__builtins__,但仍建议仅使用简单表达式(如lambda x: x['age']),避免复杂逻辑。 - 性能:排序时间复杂度 O(n log n),键函数对每个元素调用一次。
- 空列表或无效列表:返回空列表或原列表(不报错)。
- 手动输入 JSON:若在文本框输入 JSON 数组,必须使用双引号(如
[{"a":1}]),否则可能解析失败。
💎 小贴士:
- 需要按字符串长度、绝对值等计算值时,lambda 表达式是灵活的方式。
- 对于简单字典键排序,直接写键名即可,无需
x['key']形式。- 若列表元素是基本类型(数字、字符串),可将排序键留空,直接排序。
- 输出结果可直接用于【列表截取】获取前 N 名(Top N)。
- 由于是纯数据节点,无需执行信号,可在数据流中随时使用。
这篇文档对您有帮助吗?
您的反馈将帮助我们持续优化文档内容

