如何用glom将字典中不同格式的uptime值统一转为字符串
解决方案
你需要对Coalesce返回的结果追加类型判断和转换逻辑:当拿到的是字典类型时,将键值对按顺序拼接为目标字符串,字符串类型则直接返回。
完整可运行代码
from glom import glom, Coalesce, Iter, Merge, T, If spec = ( T.items(), Iter( { "uptime": Coalesce(T[1]["uptime"], T[1]["kernel_uptime"]) >> If( pred=lambda x: isinstance(x, dict), then=lambda d: ", ".join(f"{v} {k}" for k, v in d.items()), default=T ) }, ), Merge(), ) # 测试IOS输入 show_version_ios_parsed = { "version": { "uptime": "7 weeks, 6 days, 3 hours, 37 minutes", } } print(glom(show_version_ios_parsed, spec)) # 输出:{'uptime': '7 weeks, 6 days, 3 hours, 37 minutes'} # 测试NXOS输入 show_version_nxos_parsed = { "platform": { "kernel_uptime": {"days": 102, "hours": 1, "minutes": 2, "seconds": 13}, } } print(glom(show_version_nxos_parsed, spec)) # 输出:{'uptime': '102 days, 1 hours, 2 minutes, 13 seconds'}
逻辑说明
- 用
>>操作符将Coalesce的输出传递给后续的If判断节点 If节点首先判断输入值是否为字典类型:- 是字典则遍历所有键值对,按
值 键的格式拼接,用逗号分隔 - 不是字典(即IOS场景的字符串)则直接返回原值
- 是字典则遍历所有键值对,按
内容的提问来源于stack exchange,提问作者Dmitry Teslya
相关产品推荐
相关产品推荐

