Python字典赋值问题:如何生成单元素元组适配Jinja模板
解决字典值类型不一致导致的Jinja模板适配问题
你的问题核心是字典值的类型不统一:单条toast对应的checkin_id值是字典,多条时是元组,导致Jinja模板无法一致处理。要解决这个问题,只需要让所有checkin_id对应的值统一为元组类型,包括单元素的情况。
修改后的代码方案一:基础写法
toasts = {} for toast in checkin_toasts: checkin_id = toast['checkin_id'] # 提前封装好用户数据 user_info = { 'user_id': toast['user_id'], 'username': toast['username'] } if checkin_id not in toasts: # 初始就存为单元素元组(必须加逗号,这是Python单元素元组的语法要求) toasts[checkin_id] = (user_info,) else: # 将现有元组与新的用户数据拼接成新元组 toasts[checkin_id] = toasts[checkin_id] + (user_info,)
更简洁的方案二:用collections.defaultdict简化
如果你不想写判断逻辑,可以用defaultdict自动初始化空元组:
from collections import defaultdict toasts = defaultdict(tuple) for toast in checkin_toasts: user_info = { 'user_id': toast['user_id'], 'username': toast['username'] } # 直接追加新的用户数据到元组中 toasts[toast['checkin_id']] += (user_info,)
效果验证
用你的3条测试数据运行后,生成的字典会和你手动修改后的格式完全一致:
{8: ({'user_id': 1, 'username': 'shaunwo'}, {'user_id': 2, 'username': 'shaunwo2'}), 9: ({'user_id': 1, 'username': 'shaunwo'},)}
此时所有checkin_id对应的值都是元组类型,Jinja模板就能完美适配了。
内容的提问来源于stack exchange,提问作者Shaun Worcester
相关产品推荐
相关产品推荐

