如何在Jinja中让循环执行1次后终止,实现字典与列表元素一一匹配
解决方案
你的问题根源是使用了双层嵌套循环,所以每个字典键都会遍历完所有颜色值,生成笛卡尔积式的重复结果。只需改为单次循环,借助Jinja2循环内置的索引变量取对应位置的颜色即可实现一一匹配。
修改后的代码
series: [{ points: [ {% for key, value in Top10.items() %} { x: "{{key}}", y: {{ value }}, fill: "{{ colors[loop.index0] }}" }, {% endfor %} ] }],
注:
loop.index0是Jinja2 for循环的内置变量,代表当前循环的迭代索引,从0开始计数,正好匹配列表的下标规则。同时修正了你原代码中JS对象属性的语法错误:fill后的等号改为JS对象要求的冒号。
注意事项
- 请确保
Top10的元素数量和colors列表的长度一致,否则会出现索引越界问题 - 如果使用Python3.7以下版本,默认字典不保留插入顺序,建议将
Top10转换为collections.OrderedDict类型,保证键的顺序和颜色顺序一一对应
内容的提问来源于stack exchange,提问作者Shravya Mutyapu
相关产品推荐
相关产品推荐

