You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Rego中将对象的键转换为小写(值保持不变)?

在Rego中将对象键转为小写(值保持不变)的实现方法

需求是将如下Rego对象:

d := {"a": "aye", "B": "bEe"}

转换为键全小写、值保持不变的对象:

l := {"a": "aye", "b": "bEe"}

尝试过以下无效写法:

d := {"a": "aye", "B": "bEe"}
l1 := { k: lower(v) | k = d[_]; v = d[k] }
l2 := { k: lower(v) | k = d[_], v = d[k] }
l3 := { k : lower(v) |
  k = d[_]
  v = d[k]
}

更多无效尝试:

l4 := {k: v | k := lower(k), v := v}
l5 := {k: v | k := lower k, v := d[k]}
l6 := {k: v | k := lower(d[k]), v := d[k]}

对应的Python实现方式为:

l = {k.lower(): v for k, v in d.items()}

正确的Rego实现

可以通过一行对象推导完成需求:

d := {"a": "aye", "B": "bEe"}
l := {lower(k): v | k, v := d[_]}

说明

  • Rego的对象推导语法中,k, v := d[_]可以直接解构获取原对象中的每一组键值对;
  • lower(k)将原键转为小写,作为新对象的键,v直接复用原对象的值即可;
  • 之前的写法错误在于:要么对值调用了lower()(而非键),要么出现了k := lower(k)这种循环引用的非法赋值逻辑,导致无法正确生成目标对象。

内容的提问来源于stack exchange,提问作者theherk

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 13:27:35