如何在Jinja2中基于列表匹配字典键并快速获取对应值?
Jinja2 高效获取指定字典键值对的方法
首先纠正你写的tag_dict格式错误——这应该是个字典而非列表,正确写法是:
tag_dict = {1:{"a": "b", "y": "z"}, 2:{"a": "b", "y": "z"}, 3:{"a": "b", "y": "z"}}
你完全不需要用嵌套循环,字典的核心优势就是O(1)时间复杂度的键查找,直接通过键名就能快速定位对应值,没必要遍历整个字典去匹配。
根据你的需求,分两种场景给出实现:
场景1:遍历account_id_list时,仅当元素为3时取出tag_dict[3]的键值对
{% for account_id in account_id_list %} {% if account_id == 3 %} {% set target_tags = tag_dict[3] %} {# 遍历输出键值对 #} {% for k, v in target_tags.items() %} {{ k }}: {{ v }} {% endfor %} {% endif %} {% endfor %}
场景2:遍历account_id_list全程参照tag_dict[3]的内容(比如对比、复用)
提前把参照值赋值给变量,遍历过程直接调用,避免重复查找:
{# 提前获取参照的键值对,只查一次 #} {% set reference_tags = tag_dict[3] %} {% for account_id in account_id_list %} 当前账户ID:{{ account_id }} 参照标签a的值:{{ reference_tags.a }} 参照标签y的值:{{ reference_tags.y }} {# 这里可以添加其他业务逻辑 #} {% endfor %}
这种写法比嵌套循环效率高得多:嵌套循环需要遍历account_id_list的同时再遍历tag_dict,时间复杂度是O(n*m);而直接键查找只需要O(n)(遍历列表的时间),字典查找操作都是常数时间。
内容的提问来源于stack exchange,提问作者Yash Kamdar
相关产品推荐
相关产品推荐

